我有一个庞大的,凌乱的XML文件,我想从中检索同名的 ALL 元素(为了这篇文章,“Item”),然后能够从中检索数据每个元素的孩子。
到目前为止,我已经使用此代码返回了名为“Item”的每个元素的列表,该代码只显示命名空间url和p标签中的“Item”:
XDocument doc = XDocument.Load(@"C:\inetpub\wwwroot\mysite\myxml.xml");
XNamespace ns = "http://www.mynamespace.com";
var nodes = doc.Descendants().Elements(ns + "Item").Select(d => d.Name).ToList();
foreach(var x in nodes){
<p>@x</p>
}
但是,通过修改以下代码,我无法检索它的子项的任何数据,我得到错误'System.Xml.Linq.XName'不包含'Descendants'的定义< / EM>:
foreach(var x in nodes){
<p>@x.Descendants().Element("Name")</p>
}
这是我的XML文件的一个非常基本的版本:
<Item>
<Name>Item 1</Name>
<Type>Type 1</Type>
</Item>
我希望能够在每个'Item'元素中搜索'Name'元素并返回值。谁能看到我哪里出错?
答案 0 :(得分:3)
这是问题所在:
.Select(d => d.Name)
您明确选择了元素的名称。如果你想要实际的元素(我认为你这样做),那就去掉那个电话:
var nodes = doc.Descendants().Elements(ns + "Item").ToList();
除非您需要要急切地实现查询,否则您也可以摆脱ToList()
。