Java ДОМ: Получить список всех родителей - PullRequest
0 голосов
/ 21 января 2020

Мне нужно перечислить все элементы, которые содержат хотя бы один дочерний элемент. Например, в приведенных ниже XML, H, I, T имеется по крайней мере одно дочернее поле каждое. Мне нужно перечислить только H, I, T и игнорировать других родителей, таких как G_GT, Re c et c.

<?xml version="1.0" encoding="UTF-8"?>
<Doc>
  <Rec>
    <H>
      <Key>H</Key>
      <F1>1</F1>
      <I>
        <Key>I</Key>
        <F2>08</F2>
        <G_GT>
          <T>
            <Key>T</Key>
            <F3>1</F3>
          </T>
          <T>
            <Key>T</Key>
            <F3>2</F3>
          </T>
        </G_GT>
      </I>
    </H>
  </Rec>
</Doc>

Код должен давать Output как H, I, Т . Я работаю на Java с парсером DOM. Кто-нибудь может подсказать, как это сделать в Java с использованием DOM? Я не могу использовать функции как getElementByTagName et c, поскольку я могу получить XML с разными именами родителей и потомков. Таким образом, я должен избегать любого жесткого кодирования имени ребенка или родителя.

С уважением, Фил

1 Ответ

0 голосов
/ 22 января 2020

Чтобы найти родительский ELEMENT_NODE для ELEMENT_NODE без дочернего ELEMENT_NODE, вы могли бы начать со следующего фрагмента

NodeList elements = document.getElementsByTagName("*");
Set<String> nodesNames = new LinkedHashSet<>();
for (int i = 0; i < elements.getLength(); i++) {
      Node node = elements.item(i);
      NodeList nodeList = node.getChildNodes();
      for (int j = 0; j < nodeList.getLength(); j++) {
            Node currentNode = nodeList.item(j);
            if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
                 nodesNames.add(node.getParentNode().getNodeName());
                 break;
            }
      }
}
System.out.println("nodesNames = " + nodesNames);

приведет к выводу

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