使用 java DOM 遍历节点文本内容

Iterate through node text content with java DOM

假设我有一个看起来像这样的 XML 文件(为清楚起见添加了空格):

<stuff>
    text1
    <tag1 attribute1="value1">
        text2
    </tag1>
    text3
    <tag2 attribute2="value2">
        text4
        <tag3 attribute3="value3">
            text5
        </tag3>
        text6
    </tag2>
    text7
</stuff>

使用java DOM解析器,我可以通过在stuff标签对对应的Element上调用getTextContent()方法来获取文本.这将产生字符串:

 text1 + text2 + text3 + text4 + text5 + text6 + text7

但我真正想要的是遍历文本部分,并根据它被包围的标签对等对每个部分执行适当的操作,所以我最终得到的是

text1 + f(tag1, attribute1, value1, text2) + text3 + f(tag2, attribute2, value2, text4 +
f(tag3, attribute3, value3, text5) + text6) + text7

我该怎么做?

我想通了:虽然只有标签对及其内容算作 Element,但每个文本部分都是一个 Node(这是 Element 的超接口),并且节点方法 getChildNodes() returns a NodeList 包含所有节点的正确顺序。 node instanceof Element可用于查看哪些节点是标签对,getTagName()getAttribute(String name)getAttributes()可用于检索标签信息。非Element节点也有一个getTextContent()方法。