c#
  • xml
  • 2012-09-25 118 views 9 likes 
    9

    OuterXml - 獲取表示當前節點及其所有子節點的XML標記。XMLDocument,innerxml和outerxml之間的區別

    InnerXml - 獲取僅表示當前節點的子節點的XML標記。

    但是對於XMLDocument確實很重要嗎? (結果明智,以及我知道這並不重要,但邏輯上?)。

    實施例:

    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; 
    

    在簡單的話,雖然二者xmlresponsexmlresponse2將在上面的代碼是相同的。我應該更喜歡使用OuterXml還是InnerXml

    +0

    請注意你正在試圖得到什麼...也許如果你走XmlDocument的孩子節點(這也是XmlNode),你將能夠得到答案,無論你正在尋找。 –

    +0

    我發現更多的禮貌,如果downvoters提到的原因。 –

    +0

    @AlexeiLevenkov,我想你可以嘗試在XmlDocument(也是innerXML)上使用outerXML。 (如果你不知道,請考慮)..但是通過InnerXMl和OuterXML的定義,它們對XMLDocument是否真的很重要?雖然它們在與XMLDocument –

    回答

    13

    如果您試圖找出爲什麼它們的OuterXml和InnerXml與XmlDocument相同:請查看XmlDocument代表的節點 - 它是整個Xml樹的父代。但它本身沒有任何視覺表現 - 所以「我」+「孩子的內容」與「兒童的內容」是一樣的。

    爲什麼它的行爲這樣你可以寫基本的代碼走的XmlNode +兒童和傳遞的XmlDocument看到:

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

    輸出顯示XmlDocument的是沒有在XmlDocument的本身具有視覺呈現和最先有文本表示節點是它的孩子:

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

    一起使用時返回相同的結果非常感謝,其澄清。 –

    0

    對於那些InnerXml等於OuterXml以下解決方案將工作,如果你想要的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; 
    
    相關問題