【问题标题】:Java Dom Parser won't return child nodesJava Dom Parser 不会返回子节点
【发布时间】:2016-05-07 09:28:25
【问题描述】:

我正在尝试解析 XML 文档,但由于某种原因,我无法从任何内容中获取任何子节点。我已经厌倦了我所知道的一切。我最初尝试使用 Dom4J,但在命名空间方面遇到了重大困难。现在我正在尝试使用标准的 DOM 解析器。

我已经阅读了 oracle 教程以及其他教程,但没有看到任何关于为什么我的最基本功能失败的建议。

我将首先分享我的代码:

package testingtemp;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class DomParser {

    public static void main(String args[]){

        try{

            File inputFile = new File("C:\\Users\\jhamric\\Desktop\\Camt54.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);
            doc.getDocumentElement().normalize();
            System.out.println("Root Element: "+doc.getDocumentElement().getChildNodes());

        }catch (Exception e){
            e.printStackTrace();
        }

    }

}

所以我只想返回根的子节点(即“文档”)。应该返回一个子节点。

<?xml version="1.0"?>

-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">


     -<BkToCstmrDbtCdtNtfctn>


         +<GrpHdr>


         -<Ntfctn>

                  <Id>161RD2521JI00XSZ</Id>

                  <CreDtTm>2016-01-27T13:25:21</CreDtTm>

这只是我的 Xml 的一小部分,但您可以清楚地看到 BkToCstmrDbtCdtNtfctn 应该作为打印屏幕中的子节点返回。相反,我的控制台输出如下所示:

Root Element: [Document: null]

它报告了正确的根元素,然后告诉我没有子节点。是什么赋予了?任何帮助将不胜感激!

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    您将看到NodeList.toString 的输出,即[Document: null]。这实际上并没有提供任何有意义的信息。

    使用

    NodeList nl = doc.getDocumentElement().getChildNodes();
    System.out.println(nl.getLength());
    if (nl.getLength() > 0)
        System.out.println(nl.item(0).getNodeName());
    

    验证您的元素是否存在。

    【讨论】:

    • 效果很好。所以它返回了我想要的正确节点。现在,如果我想进入那个节点,你介意解释一下吗?假设节点名为“BkToCstmrDbtCdtNtfctn”。
    • @jesric1029 只需使用 Node 或 Element 的接口来导航文档和访问属性。不幸的是,DOM 是一个过于复杂且不直观的 API,,,
    • 谢谢。我相信我想要的是在具有属性的节点上使用的“getTextContent”名称。这样做的目的是将 XML 文件解析为一个表。通过能够将具有属性的每个节点解析为单独的列表,我想我可以将其保存到表中。
    猜你喜欢
    • 2014-02-09
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多