如何使用带有 xslt 的 saxon 指定输出到 xml 文件?
How to specify output to an xml file using saxon with xslt?
如何获得 作为 xml
?
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ java -jar /usr/share/java/saxon.jar -o outputfile.xml note.xml note.xsl
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat outputfile.xml
<?xml version="1.0" encoding="UTF-8"?>
Tove
Jani
Reminder
Don't forget me this weekend!
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xml
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xsl
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="text/html"/>
<xsl:mode on-no-match="shallow-copy" />
</xsl:stylesheet>
nicholas@mordor:~/xml$
指定输出文件 不充分。也许 xsl
文件不正确,无法生成 xml
?
从评论来看,您使用的似乎是非常古老的 Saxon6 产品,它只支持 XSLT 1.0。较新的版本(当前为 10.3)实现了 XSLT 3.0。
当您的样式表指定 version="3.0" 而您的 XSLT 处理器仅支持 1.0 时,它会以“向前兼容模式”运行。在此模式下,未在 1.0 规范中定义的元素和属性将被忽略。一个这样的元素是 xsl:mode
,因此您的样式表运行时就好像 xsl:mode
声明不存在一样。这意味着您将获得默认的“不匹配”模板行为,而不是浅拷贝,它输出源文档的文本节点并忽略元素节点。
按预期输出:
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ rm outputfile.xml
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ java -jar /home/nicholas/saxon/saxon-he-10.3.jar -o:outputfile.xml note.xml note.xsl
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat outputfile.xml
<?xml version="1.0" encoding="UTF-8"?><note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>nicholas@mordor:~/xml$
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xsl
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="text/html"/>
<xsl:mode on-no-match="shallow-copy" />
</xsl:stylesheet>
nicholas@mordor:~/xml$
只是觉得我might能够使用系统库。
如何获得 xml
?
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ java -jar /usr/share/java/saxon.jar -o outputfile.xml note.xml note.xsl
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat outputfile.xml
<?xml version="1.0" encoding="UTF-8"?>
Tove
Jani
Reminder
Don't forget me this weekend!
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xml
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xsl
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="text/html"/>
<xsl:mode on-no-match="shallow-copy" />
</xsl:stylesheet>
nicholas@mordor:~/xml$
指定输出文件 xsl
文件不正确,无法生成 xml
?
从评论来看,您使用的似乎是非常古老的 Saxon6 产品,它只支持 XSLT 1.0。较新的版本(当前为 10.3)实现了 XSLT 3.0。
当您的样式表指定 version="3.0" 而您的 XSLT 处理器仅支持 1.0 时,它会以“向前兼容模式”运行。在此模式下,未在 1.0 规范中定义的元素和属性将被忽略。一个这样的元素是 xsl:mode
,因此您的样式表运行时就好像 xsl:mode
声明不存在一样。这意味着您将获得默认的“不匹配”模板行为,而不是浅拷贝,它输出源文档的文本节点并忽略元素节点。
按预期输出:
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ rm outputfile.xml
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ java -jar /home/nicholas/saxon/saxon-he-10.3.jar -o:outputfile.xml note.xml note.xsl
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat outputfile.xml
<?xml version="1.0" encoding="UTF-8"?><note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>nicholas@mordor:~/xml$
nicholas@mordor:~/xml$
nicholas@mordor:~/xml$ cat note.xsl
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="text/html"/>
<xsl:mode on-no-match="shallow-copy" />
</xsl:stylesheet>
nicholas@mordor:~/xml$
只是觉得我might能够使用系统库。