2012-09-25 8 views
9

OuterXml - pobiera znacznik XML reprezentujący bieżący węzeł i wszystkie jego węzły potomne.XMLDocument, różnica między innerxml i outerxml

InnerXml - pobiera znacznik XML reprezentujący tylko węzły podrzędne bieżącego węzła.

Ale czy dla XMLDocument ma to naprawdę znaczenie? (W rezultacie, wiem, że to nie ma znaczenia, ale logicznie?).

przykład:

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; 

Krótko mówiąc, chociaż zarówno xmlresponse i xmlresponse2 będzie taka sama w kodzie powyżej. Czy powinienem używać OuterXml lub InnerXml?

+0

Pamiętaj, co próbujesz uzyskać ... Może, jeśli podejdziesz do węzłów potomnych XmlDocument (który jest również XmlNode), będziesz w stanie uzyskać odpowiedź na to, czego szukasz. –

+0

Znajduję więcej uprzejmości, jeśli spadkowcy podają przyczynę. –

+0

@AlexeiLevenkov, Myślę, że możesz spróbować użyć outerXML na XmlDocument (również innerXML). (incase, jeśli nie jesteś świadomy) ... ale z definicji InnerXMl i OuterXML czy one również mają znaczenie dla XMLDocument? choć oba z nich zwracają ten sam wynik, gdy są używane z XMLDocument –

Odpowiedz

13

Jeśli próbujesz znaleźć powód, dla którego pliki OuterX i InnerXml są takie same dla XmlDocument: spójrz na to, co XmlDocument reprezentuje jako węzeł - jest to element nadrzędny całego drzewa Xml. Ale samo w sobie nie ma żadnej reprezentacji wizualnej - więc "Ja" + "treść dzieci" jest taka sama jak "treść dzieci".

Można pisać podstawowy kod chodzić XmlNode + dzieci i przekazać XmlDocument zrozumieć, dlaczego zachowuje się w ten sposób:

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,""); 

Wyjście pokazuje, że XmlDocument nie ma nic w samej XmlDocument które mają reprezentację wizualną oraz pierwszego węzeł, który ma reprezentacji tekstowej jest dziecko z nim:

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

, dzięki bardzo, to wyjaśniono. –

0

Dla przypadku InnerXml równa OuterXml następujące rozwiązanie będzie działać, jeśli chciał InnerXml:

// Create a new Xml doc object with root node as "NewRootNode" and 
// copy the inner content from old doc object using the LastChild. 
        XmlDocument doc = new XmlDocument("FileName"); 
        XmlElement newRoot = docNew.CreateElement("NewRootNode"); 
        docNew.AppendChild(newRoot); 
// The below line solves the InnerXml equals the OuterXml Problem 
        newRoot.InnerXml = oldDoc.LastChild.InnerXml; 
        string xmlText = docNew.OuterXml;