2009-06-07 8 views
3

ist Meine Frage:Xerces: Wie doppelte Knoten zusammenführen? diese

Wenn ich habe folgende XML:

<root> 
    <alpha one="start"> 
    <in>1</in> 
    </alpha> 
</root> 

und dann werde ich den folgenden Pfad hinzu:

<root><alpha one="start"><out>2</out></alpha></root> 

die

<root> 
    <alpha one="start"> 
    <in>1</in> 
    </alpha> 
</root> 
<root> 
    <alpha one="start"> 
    <out>2</out> 
    </alpha> 
</root> 
in

Ergebnisse

Ich möchte in der Lage sein, es zu konvertieren:

<root> 
    <alpha one="start"> 
    <in>1</in> 
    <out>2</out> 
    </alpha> 
</root> 

Außerdem ist es mir Umsetzung (nicht das Gefühl, das Rad neu zu erfinden heute wie), gibt es eine bestimmte Art und Weise in Xerces (2.8, C++), es zu tun?

Wenn ja, an welchem ​​Punkt der DOMDocuments Leben ist die Knotenverschmelzung getan? bei jeder Einfügung? beim Schreiben des Dokuments, explizit auf Anfrage?

Danke.

+0

Kann diese Frage wie folgt umformuliert werden? "Wie verschiebe ich die untergeordneten Elemente eines Knotens zu einem anderen Knoten?" – Glenn

Antwort

1

Wenn Sie xalan verwenden, ist es möglich, einen X-Pfad zu verwenden, um das Element zu finden und direkt in das entsprechende einzufügen.

Der folgende Code kann langsam sein, gibt aber alle "root" -Elemente zurück, wobei das Attribut "one" auf "start" gesetzt ist.

selectNodes("//root[@one="start"]") 

Es ist wahrscheinlich besser, den vollständigen Pfad

selectNodes("/abc/def/.../root[@one="start"]") 

oder wenn Sie bereits die Arbeit übergeordnete Element relativ

selectNodes("./root[@one="start"]") 

Ich denke, verwenden müssen die grundlegenden Konzepte xpath on wikipedia zu bekommen.

0

Ist es nicht nur eine einminütige Aufgabe, wenn Sie die Namen des Container-Tags kennen, in denen verschiedene Tags vorhanden sind?

In Ihrem Beispiel, erhalten Sie einen Zeiger auf die alpha Tag in allen XML-Dokumenten und legen Sie den Inhalt von allen von ihnen in das Alpha eines neuen Dokuments, wenn sie dort nicht bereits vorhanden sind.

Das ist nicht so schlimm wie das Rad neu erfinden. Ich bin nicht vertraut mit Xerces, aber mit libxml ++ würde ich dies eine einfache Aufgabe nennen.

Verwandte Themen