Обращение к определенному тегу xml

458
04 января 2017, 01:44

Имеется xml с множеством элементов. Некоторые элементы имеют одинаковое название но дочерние элементы могу отличаться.
Структура xml примерно следующая:

<tag1>
  <tag2>data1</tag2>
  <tag3>data2</tag3>
  <tag4>
    <tag5>
      <tag6>value1</tag6>
      <tag7>value2</tag7>
      <tag8>value3</tag8>
      <tag9>value4</tag9>
      <tag10>value5</tag10>
    </tag5>
    <tag5>
      <tag6>value6</tag6>
      <tag7>value7</tag7>
      <tag8>value8</tag8>
      <tag9>value9</tag9>
      <tag10>value10</tag10>
    </tag5>
  </tag4>
</tag1>

Необходимо получить значение tag9 если tag10 удовлетворяет определенному условию

Код java:

try {
    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = db.parse(new File("someXML.xml"));
    Element root = doc.getDocumentElement();
    NodeList tagFiveNodeList = root.getElementsByTagName("tag5");
    for (int i = 0; i < tagFiveNodeList.getLength(); i++) {
        Node tagFiveNode = tagFiveNodeList.item(i);
        NodeList tagFiveChildNodes = tagFiveNode.getChildNodes();
        for (int j = 0; j < tagFiveChildNodes.getLength(); j++) {
            Node tagFiveChildNode = tagFiveChildNodes.item(j);
            // проверка условия
            if (tagFiveChildNode.getTextContent().contains("Some Text")) {
            }
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}  

После проверки на содержание в любом из дочерних тегов определенного текста я хочу получить значение другого тега из этого же списка дочерних тегов.
Как мне это сделать?

Answer 1

Необходимо выполнить приведение Node к Element

Element tagFiveNode = (Element)tagFiveNodeList.item(i);

А потом использовать метод getElementsByTagName

if (tagFiveNode.getElementsByTagName('tag10').item(0).getTextContent()....)
  value = tagFiveNode.getElementsByTagName('tag9').item(0).getTextContent();

Это при условии, что такие узлы существуют. Если они могут отсутствовать, то нужно еще проверить размер коллекции, возвращаемой методом getElementsByTagName

READ ALSO
Индикатор слайда bxslider [требует правки]

Индикатор слайда bxslider [требует правки]

Как переместить индикаторы текущего слайдера на само изображение, а не под ним? Пример на скриншоте:

449
Как убрать bootstrap&#39;овский margin?

Как убрать bootstrap'овский margin?

После добавления класса "row" объекты попадают в нужную мне строку но приобретают ненужное мне свойство

563
Как убрать отступы между кнопками?

Как убрать отступы между кнопками?

Подскажите, как убрать отступы между кнопкамиЭти отступы нигде не фиксируются

444