gpt4 book ai didi

java - Java 中的 XML 解析器

转载 作者:行者123 更新时间:2023-11-30 07:16:57 26 4
gpt4 key购买 nike

在使用 getNodeName 时,它​​将返回以“#text”为前缀的实际值。我不想要那个前缀。如果我删除空格和换行符,getNodeName 工作正常。我正在使用 DocumentBuilderFactory、DocumentBuilder 和 Document 来解析 xml。

我的 XML 文件

<test>
<a>
file1
</a>
<b>
file2
</b>
<c>
<files>
<file>
myfile1
</file>
</files>
</c>
</test>

我的java方法

NodeList childNodes = null;
NodeList parentNodes = xml.getNodeList("test");
int node_len = parentNodes.getLength();
for (int i = 0; i < node_len; i++)
{
childNodes = parentNodes.item(i).getChildNodes();
int child_len = childNodes.getLength();
for (int j = 0; j < child_len; j++)
{
Node dataNode = childNodes.item(j);
System.out.println(dataNode.getNodeName());
}
}

请帮我解决这个问题。提前致谢。

最佳答案

在 XML 中,几乎一切都是节点,所有节点都实现了 getNodeName()(或每个解析器中的类似语法)。元素和属性是节点并具有明确的节点名称(elementName(在您的情况下为 "test"、"a"、"b"、"c"、"files"、"file")或 attributeName (你没有属性))。 text() 节点和 comment() 节点没有单独的节点名称。解析器通常会给它们一个 #text#comment 的公共(public)节点名,这样您就可以看到它们是什么类型。 (唯一其他合乎逻辑的选择是 null 或 emptyString 或抛出 Exception,所有这些都会更糟。)

“在使用 getNodeName 时,它​​将以“#text”作为前缀返回实际值”。你确定吗?

请确保您没有将节点名称与其值混淆。有两个独立的操作:getNodeName() 应为所有文本节点返回 "#text"getValue() 应返回 "myfile1"(可能带有尾随 \n)。请注意,您的文件包含许多空白文本节点。

请注意,如果您对某个元素进行 getValue(),则它是所有后代的串联字符串,包括空格。

另请注意,字符串 "myfile1" 不是 elementNode 文件的子项。 elementNode 有一个子 text() 节点,其字符串值为 "myfile1"

关于java - Java 中的 XML 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542974/

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