gpt4 book ai didi

java - 使用 Java DOM 处理空节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:02:36 25 4
gpt4 key购买 nike

我有一个关于 XML、Java 对 DOM 的使用和空节点的问题。我目前正在从事一个项目,其中我使用抽象机器的 XML 描述 rune 件(用于文本解析)并使用它们解析一系列输入字符串。这些抽象机器的实际构建和解释都已完成并且工作正常,但我遇到了一个相当有趣的 XML 需求。具体来说,我需要能够将一个空的 InputString 节点变成一个空字符串 ("") 并且仍然执行我的解析例程。然而,当我试图从我的 XML 树中提取这个空白节点时,问题就出现了。这会导致空指针异常,然后通常会发生不好的事情。这是有问题的 XML 片段(注意第一个元素是空的):

    <InputStringList>
<InputString></InputString>
<InputString>000</InputString>
<InputString>111</InputString>
<InputString>01001</InputString>
<InputString>1011011</InputString>
<InputString>1011000</InputString>
<InputString>01010</InputString>
<InputString>1010101110</InputString>
</InputStringList>

我使用以下方法从列表中提取我的字符串:

//Get input strings to be validated
xmlElement = (Element)xmlMachine.getElementsByTagName(XML_INPUT_STRING_LIST).item(0);
xmlNodeList = xmlElement.getElementsByTagName(XML_INPUT_STRING);
for (int j = 0; j < xmlNodeList.getLength(); j++) {

//Add input string to list
if (xmlNodeList.item(j).getFirstChild().getNodeValue() != null) {
arrInputStrings.add(xmlNodeList.item(j).getFirstChild().getNodeValue());

} else {
arrInputStrings.add("");

}
}

我该如何处理这个空箱子?我找到了很多关于删除空白文本节点的信息,但实际上我仍然必须将空白节点解析为空字符串。理想情况下,我想避免使用特殊字符来表示空白字符串。

提前感谢您的宝贵时间。

最佳答案

if (xmlNodeList.item(j).getFirstChild().getNodeValue() != null) {

nodeValue 不应该为空; firstChild 本身可能为 null,应该检查:

Node firstChild= xmlNodeList.item(j).getFirstChild();
arrInputStrings.add(firstChild==null? "" : firstChild.getNodeValue());

但是请注意,这仍然对只有一个文本节点的内容敏感。如果您有一个元素包含另一个元素,或者一些文本和一个 CDATA 部分,仅获取第一个子元素的值不足以阅读整个文本。

您真正想要的是 textContent property来自 DOM Level 3 Core,它将为您提供元素内的所有文本,无论包含什么内容。

arrInputStrings.add(xmlNodeList.item(j).getTextContent());

这在 Java 1.5 中可用继续。

关于java - 使用 Java DOM 处理空节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010726/

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