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