2016-10-10 6 views
1

Ich habe XML, das ich in ein vereinfachtes Format konvertieren muss. Ich bin mir sicher, dass dies mit XSLT gemacht werden kann, aber ich bin mir nicht sicher wie.XML konvertieren, wo der Name des Ausgabeelements dynamisch ist?

ich konvertieren müssen:

<Fields> 
    <Field> 
    <Name>Element1</Name> 
    <Value>Value 1</Value> 
    </Field> 
    <Field> 
    <Name>Element2</Name> 
    <Value>Value 2</Value> 
    </Field> 
</Fields> 

in

<Fields> 
    <Element1>Value 1</Element1> 
    <Element2>Value 2</Element2> 
</Fields> 

Das ist, was ich habe zur Zeit:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="Fields/Field/*"/> 
     <xsl:apply-templates select="*[name()]"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Antwort

1

Ihre Eingabe XML,

<Fields> 
    <Field> 
    <Name>Element1</Name> 
    <Value>Value 1</Value> 
    </Field> 
    <Field> 
    <Name>Element2</Name> 
    <Value>Value 2</Value> 
    </Field> 
</Fields> 

dieses XSLT transformiert,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="Fields"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Field"> 
    <xsl:element name="{Name}"> 
     <xsl:value-of select="Value"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

diese XML-Ausgabe liefert,

<?xml version="1.0" encoding="UTF-8"?> 
<Fields> 
    <Element1>Value 1</Element1> 
    <Element2>Value 2</Element2> 
</Fields> 

wie gewünscht.

+1

* Wichtiger Hinweis: Es gibt Regeln für gültige XML-Elementnamen. (1) Namen dürfen nicht mit einer Ziffer beginnen. (2) Namen dürfen nicht mit Sonderzeichen wie Bindestrich oder Punkt beginnen. (3) Namen dürfen keine anderen Sonderzeichen als Punkt, Bindestrich, Unterstrich und Doppelpunkt enthalten. – uL1

+0

Sie können ungültige Namen bis zu einem gewissen Grad mit der doppelten Translate-Methode verhindern - '', wobei ' $ validChars' ist eine Variable, die alle Zeichen enthält, die Sie in einem Namen zulassen möchten. Das ist ein bisschen grob. – Flynn1179

Verwandte Themen