1

DOMライブラリを使用してxml形式の文字列を解析しようとしています。何らかの理由で、私のドキュメントにnullが含まれていて、それを解析しようとすると問題が発生します。文字列変数'response'は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]ます。

編集:空のドキュメントを取得できませんでしたが、文字列値はまだnullです(コードの最後)。このようなものの価値をどのように得るのでしょうか

        <GetBatchFilesResult>
            <BatchFile>
                <Uri>uri</Uri>
                <ID>id</ID>
                <FQName>file.zip</FQName>
            </BatchFile>

        </GetBatchFilesResult>
4

2 に答える 2

1

getTextContent()を使用することもできます。getNodeValueは、要素に対してnullを返します。さらに、空白も子ノードの1つとして扱われるため、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();

ノード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 に答える