关闭 Saxon 中的 xml 标头输出
Posted
技术标签:
【中文标题】关闭 Saxon 中的 xml 标头输出【英文标题】:Turn off xml header output in Saxon 【发布时间】:2012-03-08 09:26:04 【问题描述】:使用 Saxon 9.4 的 .NET 版本,我运行如下命令行:
Query.exe -s:myfile.xml -qs:/cruisecontrol/build/msbuild[@success='true']/project[1]/target[@name='GetLatestSource']/message[last()]/text()
我得到类似的结果
<?xml version="1.0" encoding="UTF-8"?>375
我怎样才能关闭 XML 标头(省略 XML 声明),以便得到 375
作为输出?我检查了the documentation,但也许我只是想念它。
【问题讨论】:
如果通过saxon.serialize(saxon.transform(..))
使用saxon-js
(JS/Node)(只有一个SEF),您可以从SEF 本身提取输出参数并将它们作为serialize()
的第二个参数传递(否则序列化程序将不知道/尊重所需的输出配置,omit-xml-declaration
等):let outConf = sef.C.find(c => c.N === "output") .C.filter(c => c.N === "property").reduce((params, c) => params[c.name] = c.value === "yes" ? true : c.value === "no" ? false : c.value; return params; , ); let result = saxon.serialize(saxon.transform(..), outConf);
【参考方案1】:
想通了……
我需要添加omit-xml-declaration
选项:
Query.exe -s:myfile.xml -qs:"declare option saxon:output 'omit-xml-declaration=yes'; /cruisecontrol/build/msbuild[@success='true']/project[1]/target[@name='GetLatestSource']/message[last()]/text()"
将是实现此目的的一种方法。
【讨论】:
您也可以直接从命令行设置序列化参数,例如!method=text(这和 omit-xml-declaration 不太一样,它还可以防止 【参考方案2】:基于Michael Kay中的this comment,还可以使用命令行参数。
以下是使用 Java 的命令:
java -cp saxon9he.jar net.sf.saxon.Transform -s:mytemplate.xsl -xsl:myfile.xml !method=text
从命令行帮助:
来自 Saxonica 的 Saxon-HE 9.8.0.11J 用法:见http://www.saxonica.com/documentation/index.html#!using-xsl/commandline 格式:net.sf.saxon.Transform 选项参数 可用选项:-? -a -catalog -config -cr -diag -dtd -ea -expand -explain -export -ext -im -init -it -jit -l -lib -license -m -nogo -now -o -opt -or -outval -p -quit -r -relocate -repeat -s -sa -scmin -strip -t -T -target -TB -threads -TJ -Tlevel -Tout -TP -traceout -tree -u -val -versionmsg -warnings -x -xi -xmlversion -xsd -xsdversion -xsiloc -xsl -y 使用 -XYZ:?有关选项 XYZ 的详细信息 参数:
param=value 设置样式表字符串参数 +param=filename 设置样式表文档参数 ?param=expression 使用 XPath 设置样式表参数 !param=value 设置序列化参数
【讨论】:
如果从 bash 执行,您需要转义感叹号:\!method=text
以上是关于关闭 Saxon 中的 xml 标头输出的主要内容,如果未能解决你的问题,请参考以下文章
从 Saxon 9.4he 中的嵌入式资源加载 xml 和 xslt