Как обойти закрытый тег XML без открытого тега - PullRequest
0 голосов
/ 18 марта 2019

Я читаю следующий XML-файл:

В какой-то момент я нахожу теги, которые закрыты, но не открыты, как местоположение и размер.Моя логика заключается в чтении этих тегов в массив и в какой-то момент и сбой с

java.lang.ArrayIndexOutOfBoundsException

<deviceInfo>
    <device>TV2345</device>
    <deviceType>Television</deviceType>
    <location/>
    <size/>
</deviceInfo>

Вот мой код, читающий его ипытаюсь сбежать, но это не работает:

Node nNode = nList.item(i);

if (nNode.getNodeType() == Node.ELEMENT_NODE) {
  Element eElement = (Element) nNode;

  String LocationNode=eElement.getElementsByTagName("location").item(0).getTextContent();

  if (LocationNode.length() > 0) {
    String DEVICEID = eElement.getElementsByTagName("deviceId").item(0).getTextContent();
    String[] LOCATION = eElement.getElementsByTagName("location").item(0).getTextContent().split("\\/");        
}

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вы используете getElementsByTagName метод, который возвращает org.w3c.dom.NodeList объект. В случае отсутствия элементов с данным именем NodeList.getLength метод возвращает 0. Итак, приведенный ниже код безопасно получает текстовое содержимое:

NodeList locations = document.getElementsByTagName("location");
if (locations.getLength() > 0) {
    String textContent = locations.item(0).getTextContent();
    System.out.println(textContent);
}

Или вы можете создать метод, который будет это делать:

public static String getFirstTextContent(Document node, String tagName) {
    NodeList locations = node.getElementsByTagName(tagName);
    if (locations.getLength() > 0) {
        return locations.item(0).getTextContent();
    }

    return "";
}

и ваш код может выглядеть так:

String locationNode = getFirstTextContent(document, "location");

if (locationNode.length() > 0) {
    String DEVICEID = getFirstTextContent(document, "deviceId");
    String[] LOCATION = getFirstTextContent(document, "location").split("\\/");
}
0 голосов
/ 18 марта 2019

В примере xml:

<deviceInfo>
    <device>TV2345</device>
    <deviceType>Television</deviceType>
    <location />
    <size />
</deviceInfo>

Нет тега deviceId, но вы пытаетесь получить первый элемент из NodeList:

eElement.getElementsByTagName("deviceId").item(0);

И эта операцияне работает с java.lang.ArrayIndexOutOfBoundsException

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