属性が「running-head」と等しい場合は
、XMLを変換alt-title
し
、という名前の各要素の名前を変更します。Running_Head
alt-title-type
したがって、以下のコードは正常に機能している行
<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/でテストしています。