2017-12-28 12 views
0

Ich versuche, eine XSLT, die Kleinbuchstaben alle Elementnamen und ein Präfix für alle außer einem ID-Feld. Es funktioniert alles außer das ID-Feld wird nicht kopiert.Präfix alle Elemente Namen außer einer, die kopiert werden soll-wie ist

Hier ist mein XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> 
    <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" /> 

    <xsl:template match="*"> 
     <xsl:element name="theprefix_{translate(local-name(), $uppercase, $lowercase)}" namespace="{namespace-uri()}"> 
      <xsl:apply-templates select="@*|node()[not(self::unique_id)]"/> 
     </xsl:element> 
    </xsl:template> 


    <xsl:template match="@*"> 
     <xsl:attribute name="{translate(local-name(), $uppercase, $lowercase)}" namespace="{namespace-uri()}"> 
      <xsl:value-of select="."/> 
     </xsl:attribute> 
    </xsl:template> 

    <xsl:template match="comment() | text() | processing-instruction()"> 
     <xsl:copy/> 
    </xsl:template> 

    </xsl:stylesheet> 

Antwort

0

Sie verwendet unique_id in XSLT-Probe, so nehme ich an, Sie ohne Änderung nur dieses Element behalten wollen (nicht id).

eine Vorlage hinzufügen unique_id passend:

<xsl:template match="unique_id"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

und löschen [not(self::unique_id)] aus dem Code.

Die zugegebene Matrize ist spezifischer als das Template-Matching „*“, so in Fall unique_id es „gewinnt“ und verarbeitet sie nur jeden unique_id Knoten.

+0

danke, funktioniert wie ein Champion. Ich muss nachlesen, wie die Template-Anpassung funktioniert. Ich hatte keine Ahnung, dass sie so durchgefallen sind. – JvmSd121

Verwandte Themen