2016-11-18 10 views
1

Ich habe eine XML-Datei, die wie folgt aussehen:XML Änderung Tag-Namen mit dem Tag Inhalt

<MyObject> 
    <ID>1</ID> 
    <Name>Foo</Name1> 
    <Color>Blue</Color> 
    ... 
    <CustomFields> 
     <CustomField> 
      <Name>cf1</Name> 
      <Type>boolean</Type> 
      <Value>true</Value> 
     </CustomField> 
     <CustomField> 
      <Name>cf2</Name> 
      <Type>interger</Type> 
      <Value>1</Value> 
     </CustomField> 
     ... 
    </CustomFields> 
</MyObject> 

Das Problem ist, dass, wenn ich es in Excel zum Beispiel importieren, Excel erstellt me ​​2 Zeilen:

ID , Name , Color , CustomField/Name , CustomField/Type , CustomField/Value 
1 , Foo , Blue , cf1 , boolean , true 
1 , Foo , Blue , cf2 , integer, 1 

Ich möchte lieber eindeutige Spalten pro benutzerdefinierten Feldern haben. Meine Idee war also, die Quell-XML zu transformieren, indem ich den Tag-Namen "CustomField" (ohne "s") ändere, um ihn einzigartig zu machen. Ich dachte, "CustomField" mit dem Tag-Inhalt "Name" zu verketten.

So werde ich

<CustomField> 
    <Name>cf1</Name> 
    <Type>boolean</Type> 
    <Value>true</Value> 
</CustomField> 
<CustomField> 
    <Name>cf2</Name> 
    <Type>interger</Type> 
    <Value>1</Value> 
</CustomField> 

In

<CustomField_cf1> 
    <Name>cf1</Name> 
    <Type>boolean</Type> 
    <Value>true</Value> 
</CustomField_cf1> 
<CustomField_cf2> 
    <Name>cf2</Name> 
    <Type>interger</Type> 
    <Value>1</Value> 
</CustomField_cf2> 

verwandeln Das Problem ist, dass ich keine Ahnung, wie habe einigen ausgewählten Tag-Namen mit dem Wert eines Unterknoten zu ändern.

Ich schaute in XSLT, aber eindeutig habe ich nicht das erforderliche Niveau, um so etwas zu tun. Also bin ich offen für jede Art von Lösung.

Thx

Antwort

0

Verwenden Sie die Transformation Vorlage Identität plus eine Vorlage dieses

<xsl:template match="CustomField"> 
    <xsl:element name="{name()}_{Name}"> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 
+0

Thx, das funktioniert super! – Dessoul