【问题标题】:Excess child elements when parsing XML in Java在 Java 中解析 XML 时有多余的子元素
【发布时间】: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个制表符,在&lt;answers&gt;&lt;answer&gt;(一个)之间,&lt;/answer&gt;&lt;answer&gt;(三个)、&lt;/answer&gt;&lt;/answers&gt;(一个)在 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)

如果您能告诉我一个更好的方法,我将不胜感激。

【问题讨论】:

    标签: java xml


    【解决方案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 元素上尝试从中找到答案。不在文件上。
    • 乔恩,谢谢!它有效
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 2021-12-29
    • 2020-07-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多