【问题标题】:How to extracting the XML contents of an XDocument variable?如何提取 XDocument 变量的 XML 内容?
【发布时间】:2010-10-13 20:02:51
【问题描述】:

我在一个 XDocument 变量中有一个完整的 XML 文件,它是从类似这样的 API 获得的

using (var reader = XmlReader.Create("website"))
        {
            doc = XDocument.Load(reader);
        }

我需要获取 XML 的结构并浏览其节点,但是通过 XDocument 变量,我只能在一个节点中获取整个文档,不能单独提取每个节点。那么有什么解决方案或者我应该使用其他方式吗?

【问题讨论】:

    标签: .net xml linq-to-xml


    【解决方案1】:

    http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx 是一篇关于构建它的好文章

    你也可以使用linq来查询

    例如

    var loaded = XDocument.Load("sdaf");
    var q = from c in loaded.Descendants("contact")
            where (int)c.Attribute("contactId") < 4
            select (string)c.Element("firstName") + “ “ +
          (string)c.Element("lastName");
    

    删除了我上面链接的页面。

    在我看来,XDocument 和 XElement 对象很糟糕。 如果你不喜欢它们,那就去学习 xpath 和 xslt。

    【讨论】:

      【解决方案2】:

      要获取XDocument 的直接子节点,您可以尝试

          using (var reader = XmlReader.Create("website"))
          {
              var doc = XDocument.Load(reader);
              var childElements = doc.Elements();
          }
      

      然后做childElements.Descendants("name").Single().Value等进一步处理。

      【讨论】:

      • 我尝试了第一部分,但它不起作用,不确定第二部分。
      【解决方案3】:
      string xml = reader.ReadToEnd();
      
      XmlDocument thisXmlDoc = new XmlDocument();
      thisXmlDoc.LoadXml(xml); // In your case DOC
      
      reader.Close();
      
      XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator();
      XPathNodeIterator dossierNodes = thisNavigator.Select("Nodename/node");
      
      List<Dossier> thisList = GetDossiers(dossierNodes);
      thisDossierList = thisList.OrderBy(c => c.something).ToList();
      

      他使用的是 XDocument 对象,而不是 XMLDocument 对象。 – 约翰·尼古拉斯 52 秒前

      该死,你是对的。对不起!只是想帮忙...

      【讨论】:

      • 他使用的是 XDocument 对象,而不是 XMLDocument 对象。
      • XMLDOcument 没有任何问题,只是它最适用于 XPath 和 XSLT 方法。 .net 仅实现 xpath 1.0 btw - 这确实影响了您可以在 xslt 中执行的操作。哈哈,我喜欢你这样做的方式。不过还是更喜欢 linq2xml。
      【解决方案4】:
      XmlDocument xdoc;
      xdoc = new XmlDocument();
      xdoc.Load(XmlReader.Create("weblink"));
      

      无法分析 XDocument 并提取其 XML 值,这在 XmlDocument 中是可能的

      【讨论】:

      • 我认为您需要的是 XDocument.Load()。这是一种静态方法。我已经更新了我的答案以反映这一点。
      • 我猜你的方法应该也可以。但无论如何,我不必使用 XDcocument; XmlDocument 更简单,所以我使用了它。不过感谢您的参与 :)
      • 我不同意,我发现 XDocument 和 XElment 更容易使用,因为所有内容都是强类型的。当您使用 xsd 文件驱动它时,情况更是如此。当你有时间时,你应该检查一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多