Я выбрал название здесь, так как моя проблема в том, что мне нужно получить узлы 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>
Я хочу иметь возможность извлечь идентификатор из тега Item XML в Items, однако есть тег 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, и у него действительно есть узел, и когда я выводил имена над ним, «элементы» отображаются вместе с информацией и идентификатором!
foreach (XElement node in element.Elements("items"))
{
MessageBox.Show(node.Name.LocalName);
}