1

我正在尝试使用 DOM 库来解析 xml 格式的字符串。由于某种原因,我的文档包含空值,我在尝试解析它时遇到了问题。字符串变量“response”不为空,在调试模式下我可以看到该字符串。

        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>
4

2 回答 2

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 文档以查看哪种类型的节点将为 getNodeValue 返回 null。

于 2013-03-14T14:58:33.633 回答
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();
于 2013-03-14T14:54:43.783 回答