我正在阅读以下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("\\/");
}
谢谢。
答案 0 :(得分:0)
在示例xml中:
<deviceInfo>
<device>TV2345</device>
<deviceType>Television</deviceType>
<location />
<size />
</deviceInfo>
没有deviceId
标签,但是您正试图从NodeList
获取第一项:
eElement.getElementsByTagName("deviceId").item(0);
此操作失败,java.lang.ArrayIndexOutOfBoundsException
答案 1 :(得分:0)
您使用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("\\/");
}