XML节点和子节点

时间:2013-01-17 07:11:19

标签: java xml

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>

2 个答案:

答案 0 :(得分:3)

来自documentation of Node.getTextContent(),节点类型为ELEMENT_NODE

  

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

对于文本节点,方法的返回值仅为nodeValue,即节点的文本。

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

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

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

这不是一个节点“包含自身”的问题 - 这只是这个方法的定义问题。

答案 1 :(得分:1)

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

tag1执行的语句A返回下面的文本节点(1

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

在这种情况下,它们是相同的。