Лучший способ проверить пустые дочерние узлы в XML? - PullRequest
4 голосов
/ 17 октября 2008

У меня есть xml, максимум 3 уровня. Теперь с помощью C # или Xpath лучший способ проверить, все ли дочерние узлы под родительским узлом пусты.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 17 октября 2008

Приведенный образец документа:

<foo>
  <bar>
    <baz/>
    <baz>Hello, world!</baz>
    <baz><qux/></baz>
  </bar>
</foo>

Это выражение говорит вам, у каких потомков foo/bar есть дочерние элементы:

foo/bar/*[count(*)>0]

Это выражение говорит вам, у каких потомков foo/bar есть дочерние текстовые узлы:

foo/bar/*[text()]

Таким образом, чтобы все дочерние элементы были пустыми (без дочерних элементов или текстовых узлов), убедитесь, что это выражение возвращает true:

not(foo/bar/*[count(*)>0 or text()])
0 голосов
/ 17 октября 2008

Этот запрос LINQ to XML должен быть близок к тому, что вы ищете:

<code>
XElement xml = new XElement("contacts",
  new XElement("contact",
    new XAttribute("contactId", ""),
    new XElement("firstName", ""),
    new XElement("lastName", ""),
    new XElement("Address",
        new XElement("Street", ""))
    ),</p>

<p>new XElement("contact",
  new XAttribute("contactId", ""),
  new XElement("firstName", ""),
  new XElement("lastName", "")
   )
 );</p>

<p>var query = from c in xml.Elements()
  where c.Value != ""
  select c;</p>

<p>Console.WriteLine(xml);
Console.WriteLine(query.Count());</p>

<p>

При подсчете запроса == 0 у вас нет элементов с контентом.

В зависимости от того, что вам нужно, и если у вас нет другого использования для манипулирования стилем LINQ, опубликованное решение xPath вполне может подойти лучше.

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