无法提取节点下的子节点名称

时间:2013-03-26 10:38:45

标签: java dom xml-parsing

我有一个像这样的XML文件:

<book>
    <chapter name="chap1">
        <section name="c1sec1">
            <paragraph name="title1">sample</paragraph>
        </section>
        <section name="c1sec2">
            <paragraph name="title2">sample1</paragraph>
        </section>
    </chapter>
    <chapter name="chap2">
        <section name="c2sec1">
            <paragraph name="title3">sample2</paragraph>
        </section>
    </chapter>
    <chapter name="chap3">
        <section name="c3sec1">
            <paragraph name="title4">sample3</paragraph>
        </section>
    </chapter>
</book>

我想从特定的章节中提取部分。假设从“chap1”开始,输出应该是这样的:

c1sec1
c1sec2

我已经编写了以下代码来实现这一目标:

NodeList nodeList = doc.getElementsByTagName("chapter");
for (int i = 0; i < nodeList.getLength(); i++) {
    Node n = nodeList.item(i);
    NamedNodeMap m = n.getAttributes();
    if(m.getNamedItem("name").getTextContent() == "chap1")
    {
        System.out.println(n.getFirstChild().getNodeValue());
    }
}

我哪里错了?

3 个答案:

答案 0 :(得分:2)

问题的根本原因是使用==来比较字符串而不是等于

答案 1 :(得分:1)

我建议使用更简单的getAttribute()方法:

NodeList nodeList = doc.getElementsByTagName("chapter");
for (int i = 0; i < nodeList.getLength(); i++) {
    Element el = (Element)nodeList.item(i);
    if (el.getAttribute("name").equals("chap1"))
    {
        System.out.println("Found chap1");
    }
}

然后,您需要使用类似的代码从章节中提取部分名称。

答案 2 :(得分:0)

尝试使用m.getNamedItem("name").getNodeValue()代替m.getNamedItem("name").getTextContent()