Поиск элементов XML, которые не имеют подэлементов или значений в scala - PullRequest
1 голос
/ 18 мая 2011

Рассмотрим следующий XML:

val someXML =
<sammich>
  <bread>wheat</bread>
  <meat>salami</meat>
  <extras></extras>
  <condiments>
    <condiment expired="true">mayo</condiment>
    <condiment expired="false">mustard</condiment>
  </condiments>
</sammich>

Я хочу выяснить, какой элемент не имеет подэлементов, как, например, в приведенном выше XML, этот элемент будет extras . Метод длины NodeSeq возвращает 1 для дополнений, а isEmpty возвращает false. Итак, как мы можем проверить для таких элементов, которые не имеют каких-либо вложенных элементов или значения?

Пожалуйста, помогите Спасибо

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Узлы - это списки длины 1, содержащие самих себя. Детей можно вернуть с помощью descendant Если вы спросите

someXML.descendant(7).descendant.length

вы получите 0 (в вашем примере <extras></extras> находится на позиции 7 (так как символы новой строки + пробелы считаются текстовыми объектами). Вы также можете или не можете рассчитывать атрибуты:

someXML.descendant(7).attributes.length
1 голос
/ 18 мая 2011

Я просто добавлю немного к ответу Рекса.Обратите внимание, что метод descendant включает комментарии и инструкции по обработке.Предполагая, что вы хотите считать только подэлементы и текстовые узлы, вам придется проделать немного больше работы:

def isNodeEmpty(n: Node) = 
   n.descendant collect { case c @ (_: Text | _: Elem) => c } isEmpty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...