gpt4 book ai didi

Java DOM 解析器错误

转载 作者:行者123 更新时间:2023-12-01 14:40:43 25 4
gpt4 key购买 nike

这是我的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Server SYSTEM "Server.dtd">
<Server>
<MaximumUserNumber>2</MaximumUserNumber>
<ServerPortNumber>1234</ServerPortNumber>
<MessagesQueueSize>5</MessagesQueueSize>
</Server>

这是我的 Server.dtd:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Server
(MaximumUserNumber,
ServerPortNumber,
MessagesQueueSize)>
<!ELEMENT MaximumUserNumber (#PCDATA)>
<!ELEMENT ServerPortNumber (#PCDATA)>
<!ELEMENT MessagesQueueSize (#PCDATA)>

这是我的代码,它给了我一个 NullPointerException:

    public Server() {
try {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
Document document = dbf.newDocumentBuilder().parse("config.xml");
document.normalizeDocument();
NodeList nl = document.getElementsByTagName("MaximumUserNumber");
nl.item(0); // this line causes exception

}
}

我做错了什么?谢谢!

最佳答案

您的代码看起来不错。

它甚至在 jdk-7 上不会抛出任何异常。也许,您没有包含这样做的代码。

您只是没有再执行一步来查找元素的值:

    NodeList nodeList = document.getElementsByTagName("MaximumUserNumber");
Node foundNode = nodeList.item(0);
Node textNode = foundNode.getChildNodes().item(0);
String value = textNode.getNodeValue();
System.out.println(value);

输出

2

说明

document.getElementsByTagName("MaximumUserNumber") 返回一个 NodeList。它有一个找到的节点。每个元素节点(类型== ELEMENT_NODE)即使只包含文本也有子节点。在本例中,唯一的子节点是 TEXT_NODE 类型的节点:Node textNode =foundNode.getChildNodes().item(0);。从这种类型的节点中,您只需获取它的值。

有一种更快的方法可以从纯文本元素中获取文本值:

    NodeList nodeList = document.getElementsByTagName("MaximumUserNumber");
Node foundNode = nodeList.item(0);
String value = foundNode.getTextContent();
System.out.println(value);

这里,.getTextContent() 返回此节点及其后代的文本内容。

这两种情况都不是真正安全的(没有空检查或节点类型检查),但如果与模式一起使用,则可以被视为安全。

关于Java DOM 解析器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989307/

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