Как перебрать xml, используя linq2xml или Xquery - PullRequest
1 голос
/ 10 января 2011

У меня есть входящий файл с данными как

<root><![CDATA[<defs><elements>
      <element><item>aa</item><int>1</int></element>
      <element><item>bb</item><int>2</int></element>
      <element><item>cc</item><int>3</int></element>
</elements></defs>]]></root>

запись нескольких foreach (xElement x в root.Elements) кажется излишней!

в поисках менее подробного метода, предпочтительно с использованием C #

ОБНОВЛЕНИЕ - да - вход в CDATA, будьте уверены, это не мой дизайн, и у меня НОЛЬ контроля над ним!

1 Ответ

3 голосов
/ 10 января 2011

Предполагая, что неприятный раздел CDATA является преднамеренным, и вас интересует только текстовое содержимое ваших листовых элементов, вы можете сделать что-то вроде:

XElement root = XElement.Load(yourFile);
var data = from element in XElement.Parse(root.Value).Descendants("element")
           select new {
               Item = element.Elements("item").First().Value,
               Value = element.Elements("int").First().Value
           };

Тем не менее, если код, который генерирует ваш входной файл, находится под вашим контролем, рассмотрите возможность избавления от раздела CDATA. Хранение XML в XML таким способом не подходит в большинстве случаев, так как это противоречит цели языка разметки (и требует нескольких проходов синтаксического анализатора, как показано выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...