gpt4 book ai didi

java - 试图在 Java 中获取 XML 节点

转载 作者:行者123 更新时间:2023-11-30 08:19:32 25 4
gpt4 key购买 nike

        File fXmlFile = new File(path);//path is a String
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document XMLbook = dBuilder.parse(fXmlFile);
Node root = XMLbook.getFirstChild(); //(1)
Node book = XMLbook.getElementsByTagName("BOOK").item(0);//(2)
Node lastChapter=book.getLastChild();//(3)
Node lastSubChapter=lastChapter.getLastChild(); //(4)
...
}

问题是它在 lastSubChapter 处达到 null,所以我的程序以错误的方式结束 :( 而且我不知道我做错了什么......代码似乎没问题。

此外,我不明白 NULL 代表什么:节点值?

  1. [ROOT: NULL ] - 我在调试时看到的内容
  2. [ BOOK: NULL]-调试时看到的内容
  3. [ #text: ] - 我在调试时看到的内容 - 这是什么意思?
  4. 问题!!这里 lastSubChapter 得到 NULL :( 为什么?

我正在读取的 XML 文件是:

    <?xml version="1.0"?>
<ROOT>
<TITLE>Portocalia ca zapada</TITLE>
<BOOK>
<Chapter name="1">
<Subchapter name="1.1">
<paragraph>Primul paragraf!</paragraph>
</Subchapter>
</Chapter>
<Chapter name="2">
<Subchapter name="2.1">
<paragraph>A fost o data ca niciodata</paragraph>
</Subchapter>
<Subchapter name="2.2">
<paragraph>In luna a13a ea s-a maritat.</paragraph>
</Subchapter>
<Subchapter name="2.3">
<paragraph>In continuare, bineinteles</paragraph>
<paragraph>asa cum se intampla in toate povestile</paragraph>
</Subchapter>
</Chapter>
</BOOK>
</ROOT>

我想获取最后一个节点 Subchapter,即名称为“2.3”的节点。

还有其他更安全的方法吗?

最佳答案

由于 XML 内容的缩进,BOOKChapter 的子项也包含空格(即文本内容)。所以 getLastChild 正在检索空白文本而不是元素。

您可以简单地通过 Element#getElementsByTagName 访问元素并获取最后一个节点。

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document XMLbook = dBuilder.parse(fXmlFile);
Node root = XMLbook.getFirstChild(); //(1)
Node book = XMLbook.getElementsByTagName("BOOK").item(0);//(2)
NodeList chapterNodes = ((Element)book).getElementsByTagName("Chapter");
if(chapterNodes != null && chapterNodes.getLength() > 0) {
Node chapterNode = chapterNodes.item(chapterNodes.getLength() - 1);
NodeList subChapterNodes = ((Element)chapterNode).getElementsByTagName("Subchapter");
if(subChapterNodes != null && subChapterNodes.getLength() > 0) {
Node subChapterNode = subChapterNodes.item(subChapterNodes.getLength() - 1);
System.out.println(subChapterNode.getNodeName());
}
}

关于java - 试图在 Java 中获取 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com