2
header = new LinkedHashMap<String,Object>();
Element headerElement = (Element)doc.getElementsByTagName( "Header").item(0);
NodeList elementList = headerElement.getElementsByTagName( "*" );
for( int index =0; index < elementList.getLength(); index++ ){
    Node element = elementList.item(index);
    System.out.println( element.getChildNodes().item(0).getTextContent() ); // Statement A          
    System.out.println( element.getTextContent()); // Statement B

Statement A 和 Statement B 都打印相同的输出。

这是什么意思,每个节点都是自己的子节点?

输入 XML 是

<Header>
    <tag1>1</tag1>
    <tag2>2</tag2>
    <tag3>3</tag3>
    <tag4>4</tag4>
</Header>
4

2 回答 2

3

从 的文档中Node.getTextContent(),对于节点类型ELEMENT_NODE

每个子节点的 textContent 属性值的串联,不包括 COMMENT_NODE 和 PROCESSING_INSTRUCTION_NODE 节点。如果节点没有子节点,则这是空字符串。

而对于文本节点,该方法的返回值只是nodeValue,即节点的文本。

所以是的 - 在具有单个子节点(文本节点)的元素上调用它会给您与直接在该文本节点上调用它相同的结果。但在其他情况下,您会得到不同的结果。例如,如果您有这样的元素:

<tag>1<break />2</tag>

会有两个子文本节点和一个子元素节点,结果将是“1 2”(或者可能是“12”;我不确定在这种串联中间距是如何工作的,但你可以检查一下)。

这不是一个节点“包含自己”的问题——这只是这个方法做什么的定义问题。

于 2013-01-17T07:18:29.353 回答
1

getTextContent()return 返回此节点及其后代的文本内容。

at 执行的语句 Atag1返回下面的文本节点 ( 1)

在同一位置执行的语句 B 获取tag1(具有一个文本节点的列表)的子节点,选择第一个(唯一的)文本节点并显示其文本值。

在这种情况下,它们是同一件事。

于 2013-01-17T07:20:46.683 回答