2016-07-19 10 views
0

Ich versuche, Knoten aus einer XML-Zeichenfolge zu erhalten. Aus irgendeinem Grund kann ich nur das erste Tag bekommen. Sicher, es ist etwas Triviales, das ich übersehe, aber in anderen (nicht verketteten) Fällen funktioniert die txt2xml-Funktion gut. Ist es die Tatsache, dass die Zeichenfolge verkettet ist?Javascript XML von Zeichenfolge

Um meine eigene Frage hier zu beantworten ... es ist nicht die Verkettung. Lässt man das erste und das letzte Tag aus und verarbeitet nur f, so wird .length = 1.

function txt2xml(a) { 
    var parser = new DOMParser(); 
    var v = parser.parseFromString(a, "text/xml"); 
    return v; 
} 

function init() { 
    var f = "<node1 key='firstkey'/>Some text here would be nice.<node2>Text for node 2</node2>"; 
    alert("<tag>" + f + "</tag>"); //gives me: <tag><node1 key='firstkey'/>Some text here would be nice.<node2>Text for node 2</node2></tag> 

    var g = txt2xml("<tag>" + f + "</tag>"); 

    alert(g.childNodes.length); //gives me 1...? 
    alert(g.childNodes[0].nodeName); //gives me tag (makes sense). Any higher than 0 gives a blank. Also makes sense when .length=1 
} 

Warum ist g.childNodes.length = 1 und warum kann ich nicht zugreifen <node1>? Jede Hilfe wird geschätzt. Vielen Dank für Ihre Zeit.

+0

Nun, die Wurzel hat in der Tat nur ein Kind, ''. Alle anderen sind _descendants_. Haben Sie 'g.childNodes [0] .childNodes [0] .nodeName' probiert? Das sollte (wenn es zwischen den Tags keine Leerzeichen gibt) "node1" geben. – Boldewyn

+0

Das gibt mir nichts .... :-( Ich dachte in diesem Fall _was_ die Wurzel? Dann sollte es 3 Kinder geben (, #text und ). – Leon

Antwort

0

habe es endlich ...

Es dauerte einige Zeit und Mühe, aber ich habe endlich die Lösung gefunden. Immer noch verwirrt, aber es funktioniert. Es scheint, dass v gibt xml und zeigt die Wurzel, aber eigentlich ist nicht der Stamm. Durch Setzen von v auf v.documentElement wird die echte Wurzel angezeigt. Der korrekte (Ed) Code wäre dann:

function txt2xml(a) { 
    var parser = new DOMParser(); 
    var v = parser.parseFromString(a, "text/xml"); 
    return v.documentElement; 
} 

function init() { 
    var f = "<node1 key='firstkey'/>Some text here would be nice.<node2>Text for node 2</node2>"; 
    alert("<tag>" + f + "</tag>"); //gives me: <tag><node1 key='firstkey'/>Some text here would be nice.<node2>Text for node 2</node2></tag> 

    var g = txt2xml("<tag>" + f + "</tag>"); 

    alert(g.childNodes.length); //gives me 3...! 
    alert(g.childNodes[0].nodeName); //gives me node1 (makes sense). It's the first child of <tag>. 
}