2012-04-01 3 views
1

Dies ist eine Frage über Konzept.Erben von XML-Dateien und Ändern von Werten

Ich habe eine XML Datei, machen wir esBasis nennen:

<base id="default"> 
    <tags> 
     <tag>tag_one</tag> 
     <tag>tag_two</tag> 
     <tag>tag_three</tag> 
    </tags> 
    <data> 
     <data_a>blue</data_a> 
     <data_b>3</data_b> 
    </data> 
</base> 

Was ich tun möchte, ist in einer anderen Datei erweitern diese XML der Lage sein, individuelle Eigenschaften zu modifizieren . Zum Beispiel möchte ich die Datei erben und einen neuen mit einem anderen data/data_a Knoten machen:

<base id="green" import="default"> 
    <data> 
     <data_a>green</data_a> 
    </data> 
</base> 

Bisher ist es ziemlich einfach, ersetzt es die alten data/data_a mit dem neuen. Ich kann sogar einen neuen Knoten hinzufügen:

<base id="ext" import="default"> 
    <moredata> 
     <data>extended version</data> 
    </moredata> 
</base> 

Und immer noch ist es ziemlich einfach. Das Problem tritt auf, wenn ich einen Knoten löschen oder mit XML-Listen umgehen möchte (wie der Knoten tags).

Wie soll ich einen bestimmten Index in einer Liste referenzieren? Ich dachte, etwas zu tun:

<base id="diffList" import="default"> 
    <tags> 
     <tag index="1">this is not anymore tag_two</tag> 
    </tags> 
</base> 

Und zum Löschen eines Knotens/Array-Index:

<base id="deleting" import="default"> 
    <tags> 
     <tag index="2"/> 
    </tags> 
    <data/> 
</base> 

<!-- This will result in an XML containing these values: --> 

<base> 
    <tag>tag_one</tag> 
    <tag>tag_two</tag> 
</base> 

Aber ich bin nicht zufrieden mit meiner Lösungen. Ich weiß nichts über XSLT oder andere XML-Transformationswerkzeuge, aber ich denke, dass jemand das schon einmal gemacht haben muss.

Das Schlüssel Ziel ich suche ist erleichtern die XML von Hand (beide die Basis und die „extended“) zu schreiben.

Ich bin offen für neue Lösungen neben XML, wenn sie einfach manuell zu schreiben sind.

Danke fürs Lesen.

Antwort

1

Die folgenden können Sie führen. XSLT kann ein XML in ein anderes umwandeln.

<?xml version="1.0" encoding="UTF-8"?> 
<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:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="data_a"> 
     <data_a>green</data_a> 
    </xsl:template> 

    <xsl:template match="tags/tag[1]"/> 

</xsl:stylesheet> 

Erläuterung der drei Vorlagen oben:
(1), alle Knoten kopieren und Attribute
(2), aber DATA_A Knoten ändern
(3) und nichts tun für den ersten Tag-Element innerhalb (any) Tags Element.

Ich hoffe, dies wird Ihnen helfen, Ihre XML zu transformieren.