我正在尝试将xml转换为html。使用氧气的Xpath如下:
<a href="#cite{count(preceding::citation) + 1}">
<xsl:value-of select="count(preceding::citation) + 1"/>
</a>
基本上,这样做的目的是根据前面的参考数量插入编号的参考链接。
这在氧气中转化时起作用。
从命令行运行时,1
是所有链接的输出。
命令行命令我试过看起来像这样:
java -jar /usr/share/java/saxon9he.jar -s:report1.xml -xsl:test.xsl -o:output4.html -t
我也试过saxon9ee:
java -cp /usr/share/java/saxon9ee.jar com.saxonica.Transform -s:report1.xml -xsl:test.xsl -o:output3.html -t
感谢任何帮助!
test.xsl可以在这里找到
http://pastebin.com/6qZeEgD8
report1.xml
http://pastebin.com/5SMY8c7W
contentconfig.xml
http://pastebin.com/A2etm4Cr
以下是-t
输出:
Saxon-HE 9.7.0.4J from Saxonica
Java version 1.7.0_79
Stylesheet compilation time: 1.59928s (1599.280903ms)
Processing file:/root /CRIReportProject/cpreport.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/root/CRIReportProject/cpreport.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 1.296529ms
Tree size: 27 nodes, 54 characters, 5 attributes
URIResolver.resolve href="contentconfig.xml" base="file:/root/CRIReportProject/cptest.xsl"
Building tree for file:/root/CRIReportProject/contentconfig.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 3.144498ms
Tree size: 28 nodes, 161 characters, 6 attributes
Execution time: 131.347609ms
使用的内存:8428592
答案 0 :(得分:1)
您正在使用match =&#34;方法&#34;在模板规则中执行count(preceding::citation)
,并且评估的上下文项是文档<method>
中的report1.xml
元素。本文档不包含<citation>
个元素,因此count(preceding::citation)
返回零是完全合理的。您周围的<xsl:if>
会查看其他文档contentconfig.xml
,但它不会更改该文档的上下文。也许xsl:if
应该更改为xsl:for-each
,但之后您还需要进行其他更改,因为代码也在寻找sup/a/@id
之类的元素,而不是count(preceding::citation)+1
存在于任一源文档中。
我不知道为什么这个代码在oXygen中应该有不同的行为。
顺便说一句,如果您确实将xsl:if更改为xsl:for-each,那么您可以将position()
更改为{{1}},这样效率会更高。