2016-11-21 3 views
3

ich ein XML-Dokument kopierte und ein Attribut auf bestimmte Knoten hinzufügen (siehe: xslt how to add attributes to copy-of)XSLT: Positionierung von neu hinzugefügte Attribute

Das Ding ist, meine Knoten bereits einige vorhandenen Attribute, zB:

<element id="123" dbfield="table"> 

Wenn ich ein neues Attribut hinzufügen, wird es vor dem ersten Attribut positioniert, dass genau wie:

<element version="default" id="123" dbfield="table"> 

ich bevorzugen es als das letzte Attribut haben, wie folgt aus:

<element id="123" dbfield="table" version="default"> 

Gibt es eine Möglichkeit, die Position der neuen „Version“ -Attribut gesetzt? Danke für Ihre Hilfe!

+0

Reihenfolge der Attribute spielt keine Rolle. Was möchten Sie genau machen? – potame

+0

Alle meine Mitarbeiter sind an diese Bestellung gewöhnt, also möchte ich sie nicht ändern, wenn es nicht nötig ist. Einige dieser Werte werden von Zeit zu Zeit manuell gesetzt, weshalb ich es vorziehe, die Reihenfolge beizubehalten. Ich möchte das neue Attribut als das letzte hinzugefügt haben, siehe das Beispiel. – brun0

+0

@ brun0 Welchen speziellen Prozessor verwenden Sie? –

Antwort

1

Die XSLT-Sprache bietet keine Möglichkeit, die Reihenfolge der Attribute zu steuern, da die XML language specification explizit angibt, dass die Reihenfolge der Attribute nicht signifikant ist.

Dennoch werden die meisten Prozessoren die Attribute in der Reihenfolge der Befehle, um sie aufzuschreiben gegeben - so dass Sie nur die Reihenfolge ändern, müssen von (vermutlich, wie Sie nicht Ihren aktuellen Code anzeigen):

<xsl:template match="element"> 
    <xsl:copy> 
     <xsl:attribute name="version">default</xsl:attribute> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

zu:

<xsl:template match="element"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:attribute name="version">default</xsl:attribute> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
+0

Beachten Sie, dass diese beiden Vorlagenregeln unterschiedliche Auswirkungen haben, wenn das vorhandene 'Element' bereits ein Attribut 'Version' hat. Wenn Sie zwei Attribute mit demselben Namen schreiben, gewinnt der letzte. –

+0

Vielen Dank für Ihre Hilfe! – brun0

2

Neuere Versionen von Saxon (PE und EE) eine Serialisierung Eigenschaft saxon:attribute-order. Schreiben:

<xsl:output saxon:attribute-order="id dbfield version"/> 

wird dafür sorgen, dass die Attribute diese Namen passend in der definierten Reihenfolge serialisiert werden, gefolgt von Attributen, die nicht in der Liste enthalten sind.

Obwohl es wahr ist, dass Sie die Attributreihenfolge nie als signifikant betrachten sollten, um zu bewirken, dass sich die Empfangssoftware anders verhält, stimme ich Ihnen zu, dass eines der Entwurfsziele für XML menschenlesbar sein soll Eine konsistente Attributreihenfolge hilft dabei, dieses Ziel zu erreichen.

Verwandte Themen