从xml字符串构建DOM文档给我一个空文档

时间:2013-03-14 14:21:42

标签: java xml string dom

我尝试使用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>

2 个答案:

答案 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();