XMLDocument,内部XML和外部XML之间的区别

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都是相同的。我应该更喜欢使用OuterXml还是InnerXml


不确定您想要得到什么...也许如果您遍历XmlDocument的子节点(它也是XmlNode),您将能够获得您正在寻找的答案。 - Alexei Levenkov
1
如果投票者能说明原因,我会更感激。 - Rookie Programmer Aravind
@AlexeiLevenkov,我认为你可以尝试在XmlDocument上使用outerXML(还有innerXML)。(如果你不知道的话)但是根据InnerXMl和OuterXML的定义,它们对于XMLDocument真的很重要吗?虽然两者在与XMLDocument一起使用时返回相同的结果。 - Rookie Programmer Aravind
2个回答

20
如果您正试图找出为什么XmlDocument的OuterXml和InnerXml相同:请看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

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接