【问题标题】:XElement - reading the nodes C#XElement - 读取节点 C#
【发布时间】:2015-11-02 21:30:22
【问题描述】:

我有一个如下的 XML:

<?xml version="1.0"?>
<productfeed>
    <product>
        <name>x</name>
        <etc>z</etc>
    </product>
    <product>
        <name>x</name>
        <etc>z</etc>
    </product>
</productfeed>

我今天尝试使用 LINQ 和 XElement 从 XML 中检索数据。我设法加载了文件,但是我无法访问 productfeed 节点(它返回 null)。有趣的是,我可以直接从根目录遍历product 节点,而我读到不应该那样跳过。我是不是解释错了,也许productfeed 节点已经在根目录下,但是我怎么才能得到它的纯内容呢?

XElement root = XElement.Load("...path..."); // works
XElement productFeed = root.Element("productfeed"); // returns null
IEnumerable<XElement> products = root.Elements("product"); // works

【问题讨论】:

  • 检查 XElement.Document 属性。我想这就是你要找的。​​span>
  • root&lt;productfeed&gt;
  • 获得“纯内容”是什么意思?

标签: c# xml linq xelement


【解决方案1】:

您应该正式将其加载到 XDocument 中。那将有一个 &lt;productfeed&gt; 元素作为 Root 属性。

XElement 可以让你跳过这一步,它可以同时作为 Document 和 root。修复很简单:

XElement productFeed = root; //.Element("productfeed"); 

XElementXDocument 解析相同的内容,但 XDocument 有一个(更完整的)文档包装器,在处理 &lt;? &gt; 处理指令等时需要它。

【讨论】:

  • 前面的cmets的答案很有用。但是,如果我尝试: XElement root = XElement("..path..");或 XDocument rootDocument = XDocument("...path...");解析出来的结果是一模一样的,那有什么区别呢?
  • 好吧,也许它们的解析是一样的,但我看到有区别。我可以在加载时使用 XDocument 一步一步来。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多