我正在转换一些 XML,将每个元素重命名alt-title
为Running_Head
,前提是该属性alt-title-type
等于“running-head”。
因此,下面的代码正在使用
<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')">
...抛出此错误:
错误:XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]:xmlXPathCompiledEval:堆栈上剩下 2 个对象。
因此,该功能似乎在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/测试这个。