如何“运行”XSLT文件?


4

我收到了关于排序XML的好答案 - 我需要 使用XSLT 。但是我该怎么做呢?需要什么软件?

我需要启动什么命令或应用程序 获得一个“转换”的XML输出文件,因为我有一个XML文件和一个XSLT文件作为输入?

我没有安装任何开发环境;这是一台带WinXP + IE7的普通办公电脑。

更新:
在这个网站的帮助下,我创建了一个我想要分享的小包: XML-Sorter_v0.3.zip

Answers:


6

首先确定是否要使用XSLT 1.0或2.0。 XSLT 2.0是一种更丰富的语言,而选择XSLT 1.0的唯一原因是它在更广泛的环境中得到支持(例如,在浏览器中)。

然后决定要使用的XSLT处理器。 XSLT 1.0有很多选择; XSLT 2.0的一个相当狭窄的选择。

然后查看该XSLT处理器的文档以了解如何运行它。

鉴于您似乎可以从Windows命令行运行转换,我建议使用Saxon-HE,您可以从中获取 http://saxon.sf.net/ 。您需要安装Java,然后才能运行Saxon。文档在这里: http://www.saxonica.com/documentation/index.html#!using-xsl/commandline

如果您更喜欢简单的GUI界面,请考虑“Kernow for Saxon”。

如果你想要一个带有漂亮的编辑器和调试器的开发环境,你将不得不为此付费,但是Stylus Studio和oXygen都是很有价值的,它们都可以让你选择XSLT引擎。


安装开发套件似乎有点矫枉过正,但我​​刚刚下载了saxon jar文件。这似乎是诀窍 - 至少它生成一个输出文件!该文件是否正确,这不是我的问题的一部分。谢谢!!
Torben Gundtofte-Bruun

命令行文档链接不再有效。
fixer1234

1
@ fixer1234:我捅了一下。 (Wayback Machine是一件好事。)
G-Man

2

像XSLT处理器一样 的Xalan-J 用于命令行解决方案。对于GUI编辑器/调试器,您可以使用Eclipse,一个教程 这里

编辑:完全基于Web的解决方案 在这里找到


基于Web的解决方案链接是一个很好的编辑。
Robino

0

假设您有PowerShell可用,以及XML文件和XSLT文件

<#
.SYNOPSIS
    Transform an xml file
.DESCRIPTION
    load a XML file and load a XSLT file, then transform the XML using the XSLT and output to the console
.PARAMETER $xsltfilename
    The path to the XSLT file
.PARAMETER $filename
    The path to the XML file to be transformed
.EXAMPLE
    C:\PS> 
    .\tranform.ps1 .\rgs_broke.xml .\fix_escalation.xslt > rgs_fixed.xml
.NOTES
    Author: Alex McCool
    Date:   Jan 17, 2017
#>

param(
[Parameter(Mandatory=$true)]
[string]$xsltfilename, 
[Parameter(Mandatory=$true)]
[string]$filename
)


function Load-Xml
{
param([string]$filename)

$content = Get-Content $filename

$stream = new-object System.IO.MemoryStream

$writer = new-object System.IO.StreamWriter($stream)
$writer.Write("$content")
$writer.Flush()
$stream.position = 0

$xml = new-object System.Xml.XmlTextReader($stream)

return $xml
}

function Load-Xslt
{
param([string]$filename)

$content = Get-Content $filename

$stream = new-object System.IO.MemoryStream
$writer = new-object System.IO.StreamWriter($stream)
$writer.Write("$content")
$writer.Flush()
$stream.position = 0

$reader = [System.Xml.XmlReader]::create($stream)
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform
$xslt.Load($reader)

return $xslt
}


$xml = Load-Xml($filename)
$xslt = Load-Xslt($xsltfilename)

$output = New-Object System.IO.MemoryStream
$reader = new-object System.IO.StreamReader($output)


$arglist = new-object System.Xml.Xsl.XsltArgumentList
$xslt.Transform($xml, $arglist, $output)

$output.position = 0
$transformed = [string]$reader.ReadToEnd()
$reader.Close()

write-output $transformed

如果它发生变化,这里有一个要点

https://gist.github.com/amccool/560b533f1ea94560e0dae6367c2b75ce

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.