我收到了一个关于对 XML 进行排序的很好的答案 - 我需要使用 XSLT。但我该怎么做呢?需要什么软件?
我需要启动什么命令或应用程序假设我有一个 XML 文件和一个 XSLT 文件作为输入,如何获取“转换后的” XML 输出文件?
我没有安装任何开发环境,是一台普通的办公电脑,WinXP+IE7。
更新:
在此网站的帮助下,我创建了一个想要分享的小包:XML-Sorter_v0.3.zip
答案1
首先决定是否要使用 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 引擎的选择。
答案2
答案3
假设您有可用的 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