我尝试使用DOM库来解析xml格式的字符串。由于某种原因,我的文档包含空值,我遇到了试图解析它的问题。字符串变量'响应'不是null,我能够在调试模式下看到字符串。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(response));
Document doc = builder.parse(is);
NodeList nodes = doc.getElementsByTagName("BatchFile");;
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList batchItem = element.getChildNodes();
String uri = batchItem.item(0).getNodeValue();
String id = batchItem.item(1).getNodeValue();
String fqName = batchItem.item(2).getNodeValue();
}
运行后突出显示第Document doc = builder.parse(is);
行会显示[#document: null]
的结果。
编辑:我现在设法没有获得空文档,但字符串值仍为空(在代码末尾)。我怎样才能得到像这样的东西的价值
<GetBatchFilesResult>
<BatchFile>
<Uri>uri</Uri>
<ID>id</ID>
<FQName>file.zip</FQName>
</BatchFile>
</GetBatchFilesResult>
答案 0 :(得分:1)
您也可以使用getTextContent()。 getNodeValue将为元素返回null。此外,您最好使用getElementsByTagName,因为空格也被视为子节点之一。
Element element = (Element) nodes.item(i);
String uri = element.getElementsByTagName("Uri").item(0).getTextContent();
String id = element.getElementsByTagName("ID").item(0).getTextContent();
String fqName = element.getElementsByTagName("FQName").item(0).getTextContent();
检查Node API document以查看哪些类型的节点将为getNodeValue返回null。
答案 1 :(得分:0)
我找到了解决方案。看起来很愚蠢,你必须这样做以从节点获取值。
Element element = (Element) nodes.item(i);
NodeList batchItem = element.getChildNodes();
Element uri = (Element) batchItem.item(0);
Element id = (Element) batchItem.item(1);
Element fqName = (Element) batchItem.item(2);
NodeList test = uri.getChildNodes();
NodeList test1 = id.getChildNodes();
NodeList test2 = fqName.getChildNodes();
String strURI= test.item(0).getNodeValue();
String strID= test1.item(0).getNodeValue();
String strFQName= test2.item(0).getNodeValue();