17

OuterXml-現在のノードとそのすべての子ノードを表すXMLマークアップを取得します。

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またはを使用することを好むべきですOuterXmlInnerXml

4

2 に答える 2

19

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自体に視覚的表現を持つものはなく、テキスト表現を持つ最初のノードがその子であることを示しています。

#document = 
  xml = version="1.0"
  root = 
    item = 
      #text = test
于 2012-09-25T16:16:51.637 に答える
1

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;
于 2014-02-26T13:31:46.793 に答える