2012-09-25 12 views
9

OuterXml - ottiene il tag XML che rappresenta il nodo corrente e tutti i suoi nodi figlio.XMLDocument, differenza tra InnerXml e OuterXml

InnerXml - ottiene il markup XML che rappresenta solo i nodi figlio del nodo corrente.

Ma per XMLDocument è davvero importante? (risultato, sapete che non importa, ma logicamente?).

Esempio:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" + 
    "<title>Pride And Prejudice</title>" + 
    "</book>"); 

string xmlresponse = doc.OuterXml; 
string xmlresponse2 = doc.InnerXml; 

In parole semplici, se entrambi xmlresponse e xmlresponse2 sarà lo stesso nel codice precedente. Dovrei preferire l'utilizzo di OuterXml o InnerXml?

+0

Nota che cosa stai cercando di ottenere ... Forse se cammini i nodi figli di XmlDocument (che è anche XmlNode) sarai in grado di ottenere risposta a qualsiasi cosa tu stia cercando. –

+0

Trovo più cortesia se i downvoters ne menzionano il motivo. –

+0

@AlexeiLevenkov, penso che puoi provare a usare outerXML su XmlDocument (anche innerXML). (incase se non ne sei a conoscenza) .. ma dalla definizione di InnerXMl e OuterXML sono davvero importanti per XMLDocument? sebbene entrambi restituiscano lo stesso risultato se usati con XMLDocument –

risposta

13

Se si sta cercando di trovare il motivo per cui OuterXml e InnerXml sono gli stessi per XmlDocument: osservare ciò che XmlDocument rappresenta come nodo: è il padre dell'intero albero Xml. Ma di per sé non ha alcuna rappresentazione visiva - quindi "Io" + "contenuto di bambini" perché è lo stesso di "contenuto di bambini".

È possibile scrivere codice di base per camminare XmlNode + bambini e passare XmlDocument capire perché si comporta in questo modo:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<?xml version='1.0' ?><root><item>test</item></root>"); 

Action<XmlNode, string> dump=null; 
dump = (root, prefix) => { 
    Console.WriteLine("{0}{1} = {2}", prefix, root.Name, root.Value); 
    foreach (XmlNode n in root.ChildNodes) 
    { 
    dump(n, " " + prefix); 
    } 
}; 

dump(doc,""); 

output mostra che XmlDocument non c'è nulla in XmlDocument sé che hanno rappresentazione visiva e la prima nodo che ha la rappresentazione del testo è figlio di esso:

#document = 
    xml = version="1.0" 
    root = 
    item = 
     #text = test 
+0

grazie mille, è stato chiarito. –

0

Per il caso in cui InnerXml è uguale al OuterXml la seguente soluzione funzionerà se si voleva l'InnerXml: