【发布时间】:2011-05-07 08:18:40
【问题描述】:
我在这里选择了标题,因为我的问题是我需要获取示例中提到的 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>
我希望能够从 Items 下的 Item XML 标签中提取 ID,但是在 data 下有一个 Items 标签,其中包含 Item 条目我根本不想要这些节点 - 我想要 root/items/id/id 如果这被表示为路径。我已经使用 LINQ 尝试了我所知道的一切,所以如果有人可以提供帮助,请注意尽管这是基于系统的示例数据 - 格式无法更改,因此这不是一个可接受的解决方案。
我似乎无法确定哪里出错了 - 我尝试的每个 LINQ 表达式都没有返回任何内容,我认为命名空间是一个问题,并试图整合它,但我正在绕圈子。
解决方案必须在 Silverlight 和 C# 中工作
我尝试了以下方法:
IEnumerable<XElement> nodes =
element.Elements().Where(e => e.Name.LocalName == "items")
但是,这让我得到了所有“项目”,包括“数据”下的那些,我不想要那些。
如果我在我的 XML 上执行以下操作,我会看到显示的元素名称:
XElement element = XElement.Parse(data);
foreach (XElement node in element.Elements())
{
MessageBox.Show(node.Name.LocalName);
}
但是,当我这样做时,我根本看不到项目下的节点名称 - 我检查了 XElement,它确实有节点,当我输出它上面的名称时,“项目”连同信息和 ID 一起显示!
foreach (XElement node in element.Elements("items"))
{
MessageBox.Show(node.Name.LocalName);
}
【问题讨论】:
-
我想通了 - 有一个额外的命名空间声明是空白的 - 向我的 XML 添加一个隐含的命名空间,为此使用 XNamespace 并将其添加到元素名称中解决了问题!
标签: c# xml silverlight linq parsing