在 Java 中解析 XML 时有多余的子元素
Posted
技术标签:
【中文标题】在 Java 中解析 XML 时有多余的子元素【英文标题】:Excess child elements when parsing XML in Java 【发布时间】:2022-01-19 08:42:53 【问题描述】:我有 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<questions>
<question>
<name>First question</name>
<true>2</true>
<answers>
<answer>First answer</answer>
<answer>Second answer</answer>
<answer>Third answer</answer>
<answer>Fourth answer</answer>
</answers>
</question>
<question>
<name>Second question</name>
<true>3</true>
<answers>
<answer>First answer</answer>
<answer>Second answer</answer>
<answer>Third answer</answer>
<answer>Fourth answer</answer>
</answers>
</question>
</questions>
为什么当下面的Java代码执行时,它返回了9个元素而不是4个,并且错误的5个元素包含一个换行符和3个制表符,在<answers>
和<answer>
(一个)之间,</answer>
和<answer>
(三个)、</answer>
和 </answers>
(一个)在 XML 中:
File file = new File(path);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(file);
NodeList answers = doc.getElementsByTagName("answers").item(n).getChildNodes();
接下来,我做一个检查以切断错误的元素:
if (answers.item(i).getTextContent().trim().length() > 0)
如果您能告诉我一个更好的方法,我将不胜感激。
【问题讨论】:
【参考方案1】:它没有返回 9 个 元素 - 它返回 9 个 节点,这是正确的。 (毕竟,您要的是answers
元素的子节点。)那些只有空白的文本节点是有效节点。如果你想要元素,只需忽略 Node.getNodeType()
不返回 Node.ELEMENT_NODE
的任何节点。
或者,只需在 answers
元素上调用 getElementsByTagName("answer")
即可获取元素。这是假设您很乐意忽略任何非answer
元素。例如:
Element answersElement = (Element) doc.getElementsByTagName("answers").item(n);
NodeList answerElements = answersElement.getElementsByTagName("answer");
【讨论】:
第二种方法只能得到一个特定的答案或所有的答案,但我需要一个特定问题的答案列表。 @Sergei:请重新阅读我的建议,您调用getElementsByTagName("answer")
在answers
元素上尝试从中找到答案。不在文件上。
乔恩,谢谢!它有效以上是关于在 Java 中解析 XML 时有多余的子元素的主要内容,如果未能解决你的问题,请参考以下文章