Pourquoi le XSL fonctions `se termine-avec " et "correspond" à la fois de lancer une erreur?

Je suis la transformation du XML, le fait de renommer chaque élément nommé alt-title à Running_Head, à condition que l'attribut alt-title-type est égal à "en cours d'exécution-tête".


Ainsi, le code ci-dessous est à l'aide de la ligne de <xsl:when test="starts-with(@alt-title-type, 'running-head')"> qui fonctionne bien. Cependant, lorsque je passe à présent à l'un de ces:

  • <xsl:when test="ends-with(@alt-title-type, 'running-head')">
  • <xsl:when test="matches(@alt-title-type, 'running-head')">

...cette erreur est levée:

Erreur:XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]:
xmlXPathCompiledEval: 2 objets à gauche sur la pile.

Donc, il semble que la fonction starts-with est de travail, où ends-with et matches ne le sont pas.


Voici mon XSL, à l'aide de starts-with, cela semble fonctionner correctement:

<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>

...et voici le XML est transformé:

<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>


Je suis en train de tester ce à http://xslt.online-toolz.com/tools/xslt-transformation.php, et http://www.xsltcake.com/.

  • Merci de poster le code erroné. Que certains autres code œuvres peuvent être d'intérêt, mais n'est souvent pas pertinente dans une solution.
  • En utilisant le même format XML comme ci-dessus, puis remplacez dans le fichier XSL les "starts-with" dans <xsl:when test="starts-with(@alt-title-type, 'running-head')"> soit ends-with ou matches.
  • Oui, bien sûr - c'est ce que j'ai fait pour reproduire l'exception. Mais vous le rendre plus facile pour answerers si vous affichez le code problématique, en premier lieu, sans avoir besoin de changer quoi que ce soit. Aussi, vous pouvez éviter les questions idiotes où il s'avère une faute de frappe à la faute (comme si vous aviez tapé ends-wiith et de ne pas le remarquer).
InformationsquelleAutor Ian Campbell | 2012-07-29