Java DOM解析器错误

Java DOM解析器错误,java,xml,parsing,dom,dtd,Java,Xml,Parsing,Dom,Dtd,这是我的xml文件: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Server SYSTEM "Server.dtd"> <Server> <MaximumUserNumber>2</MaximumUserNumber> <ServerPortNumber>1234</ServerPortNumber> <MessagesQueu

这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Server SYSTEM "Server.dtd">
<Server>
    <MaximumUserNumber>2</MaximumUserNumber>
    <ServerPortNumber>1234</ServerPortNumber>
    <MessagesQueueSize>5</MessagesQueueSize>
</Server>
我做错了什么?谢谢

您的代码看起来不错

它甚至没有在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”)
返回节点列表。它有一个找到的节点。每个元素节点(type==元素_节点),即使它只包含文本,也有子元素。在这种情况下,唯一的子节点是TEXT\u 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()
返回此节点及其子节点的文本内容


这两种情况都不是真正安全的(无空检查或节点类型检查),但如果与schema一起使用,则可能会被认为是安全的。

我用Java 6尝试了您的代码。它毫无例外地发挥了作用。您使用哪个Java版本?您应该仔细检查代码实际处理的
config.xml
是否为预期版本。您真的确定您的文档是根据您认为的DTD版本进行验证的吗?无论如何,在调用
nl.item(0)
之前,您应该检查
节点列表的长度。显然,在你的情况下,长度是0。如果您仅使用这些代码片段创建独立的测试项目,那么长度是否仍然为0?
2
    NodeList nodeList = document.getElementsByTagName("MaximumUserNumber");
    Node foundNode = nodeList.item(0);
    String value = foundNode.getTextContent();
    System.out.println(value);