如何使用saxon和xslt指定xml文件的输出?

rdrgkggo  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(427)

我怎样才能得到输出 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 ?

np8igboo

np8igboo1#

按预期输出:

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$

我想我也许可以使用系统库。

tkclm6bt

tkclm6bt2#

从评论中可以看出,您使用的似乎是非常古老的saxon6产品,它只支持xslt1.0。较新的版本(当前是10.3)实现了XSLT3.0。
当样式表指定version=“3.0”并且xslt处理器仅支持1.0时,它将以“向前兼容模式”运行。在这种模式下,1.0规范中未定义的元素和属性将被忽略。其中一个因素是 xsl:mode ,所以您的样式表运行起来就像 xsl:mode 声明不在那里。这意味着不是浅层复制,而是默认的“不匹配”模板行为,它输出源文档的文本节点并忽略元素节点。

相关问题