Rog*_*oid 13 c# xml linq silverlight parsing
我在这里选择了标题,因为我的问题是需要获取示例中提到的Item节点.我有以下XML,并且在使用LINQ查询它时遇到问题,我之前已经能够解析XML了 - 但是我已经坚持了几个小时并希望有人可以提供帮助.以下是我的XML数据(示例数据):
<a:entry xmlns:a="http://www.w3.org/2005/Atom">
<a:id>98765</a:id>
<info>Data Catalogue</info>
<data>
<items>
<item>
<id>123456</id>
<value>Item One</value>
</item>
<item>
<id>654321</id>
<value>Item Two</value>
</item>
<items>
</data>
<items>
<item>
<id>123456</id>
<value>Item One</value>
</item>
<item>
<id>654321</id>
<value>Item Two</value>
</item>
<items>
<a:author>
<a:name>Catalogue</a:name>
</a:author>
</a:entry>
Run Code Online (Sandbox Code Playgroud)
我希望能够从Items下的Item XML标签中提取ID,但是在数据下面有一个带有Item条目的Items Tag我根本不想要这些节点 - 如果表达了我想要root/items/id/id作为道路.我已经尝试过LINQ的所有知识,所以如果有人可以提供帮助,请注意事项,尽管这是基于系统的示例数据 - 格式无法更改,因此这不是一个可接受的解决方案.
我似乎无法确定我出错的地方 - 我尝试的每个LINQ表达式都不会返回任何内容,我认为命名空间是一个问题,并且已经尝试集成这个但是我要进入圈子.
解决方案必须在Silverlight和C#中工作
我尝试过以下方法:
IEnumerable<XElement> nodes =
element.Elements().Where(e => e.Name.LocalName == "items")
Run Code Online (Sandbox Code Playgroud)
然而,这让我得到了所有"项目",包括"数据"下的那些我不想要那些.
如果我在XML上执行以下操作,我会看到显示的元素名称:
XElement element = XElement.Parse(data);
foreach (XElement node in element.Elements())
{
MessageBox.Show(node.Name.LocalName);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我根本看不到项目下的节点名称 - 我已经检查了XElement,它确实有节点,当我输出上面的名称时,"items"会显示信息和id!
foreach (XElement node in element.Elements("items"))
{
MessageBox.Show(node.Name.LocalName);
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*que 24
假设element是你的<a:entry>元素:
var ids = element.Element("items")
.Elements("item")
.Select(item => item.Element("id").Value);
Run Code Online (Sandbox Code Playgroud)
该Element和Elements方法返回唯一的直接孩子,不是所有的子孙,所以它不会返回<items>它是在元素<data>
我的XML中有一个空白的命名空间声明我没有注意到,一旦我将它添加到我的代码中就行了 - 忘了LINQ是非常面向NameSpace的!
XNamespace ns = "http://example.org/namespace";
var ids = element.Element(ns + "items")
.Elements("item")
.Select(item => item.Element("id").Value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48658 次 |
| 最近记录: |