我正在轉換一些XML,將名爲alt-title
的每個元素重命名爲Running_Head
,前提是屬性alt-title-type
等於「running-head」。
爲什麼XSL函數「ends-with」和「matches」都會引發錯誤?
所以,下面的代碼是使用行
<xsl:when test="starts-with(@alt-title-type, 'running-head')">
哪些工作正常。然而,當我將其更改爲以下任一:
<xsl:when test="ends-with(@alt-title-type, 'running-head')">
<xsl:when test="matches(@alt-title-type, 'running-head')">
...這個錯誤被拋出:
Error:XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompiledEval: 2 objects left on the stack.
所以,似乎函數starts-with
正在工作,其中ends-with
和matches
不是。
這裏是我的XSL,使用
starts-with
,這似乎是正常工作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" indent="yes" method="xml" />
<!-- Running_Head -->
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="starts-with(@alt-title-type, 'running-head')">
<xsl:element name="Running_Head">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template> <!-- end of Running_Head -->
</xsl:stylesheet>
...這裏被轉換的XML:
<root-node>
<alt-title alt-title-type="running-head">
This is working
</alt-title>
<alt-title alt-title-type="asdfng-head">
asdfasdf
</alt-title>
<alt-title>
asdfasdf
</alt-title>
<alt-title alt-title-type="running-head">
This is also working
</alt-title>
</root-node>
我正在測試這個在http://xslt.online-toolz.com/tools/xslt-transformation.php和http://www.xsltcake.com/。
請發表您的錯誤代碼。其他一些代碼可能有用,但在解決方案中往往不相關。 – phihag 2012-07-29 21:04:03
使用與上述相同的XML,然後在XSL中將 '結束 - 與'或'匹配'。 –
2012-07-29 21:08:39
是的,當然 - 這就是我所做的重現異常。但是,如果您在第一時間發佈有問題的代碼而無需更改任何內容,則可以讓回答者更輕鬆。此外,你可以避免愚蠢的問題,如果發現錯字是錯誤的(例如,如果你鍵入'ends-wiith'並且沒有注意到它)。 – phihag 2012-07-29 21:18:04