2016-11-11 4 views
1

Ich verwende die folgenden einen Knoten serialisiert:XSLT serialize Knoten entfernt die Attribute von Knoten

<xsl:template match="*" mode="serialize"> 
<xsl:text>&lt;</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:text>&gt;</xsl:text> 
<xsl:apply-templates mode="serialize"/> 
<xsl:text>&lt;/</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:text>&gt;</xsl:text> 
</xsl:template> 

Gibt es eine Möglichkeit, die Attribute zu halten, nachdem der Knoten Serialisierung?

Antwort

1

Abhängig von Ihrem XSLT-Prozessor möchten Sie vielleicht zuerst prüfen, ob die XPath 3.0 10 Funktion oder eine integrierte Erweiterungsfunktion unterstützt wird.

Wenn Sie es mit XSLT ausführen möchten, müssen Sie in Ihrer Vorlage auch die Attribute verarbeiten, z.

<xsl:template match="*" mode="serialize"> 
<xsl:text>&lt;</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:apply-templates select="@*" mode="serialize"/> 
... 
</xsl:template> 

beachten Sie, dass Lösungen wie http://lenzconsulting.com/xml-to-string/ existieren erarbeitet und sind wahrscheinlich besser als ein kurzer Versuch mit einigen Vorlagen als eine richtige Serialisierung, die wirklich Namespace wohlgeformte XML erzeugt, die Umläufe eine ziemliche Herausforderung ist.

+0

Wie kann ich die Attribute verarbeiten? – Roniu

+0

Nun, mein Vorschlag von '' verarbeitet sie bereits, dann müssten Sie eine Vorlage schreiben "match =" @ * "mode =" serialize "Offensichtlich mit der richtigen Serialisierung, und wie ich es getan habe, ist es schwierig, dieses Recht zu tun, also würde ich vorschlagen, eine ausgearbeitete Lösung zu verwenden. Anderenfalls beschweren sich Leute, die diese angebliche "XML" -Serialisierung konsumieren, hier oder anderswo, dass der XML-Parser sich über Fehler beschwert. –