2013-01-17 326 views
1
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 

两个语句A和语句B打印的相同的输出。XML节点和子节点

这是什么意思,每一个节点是其自身的子节点?

和输入XML是

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

显示输入XML –

回答

1

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

语句在tag1返回下方(1

文本节点 在同一个地方执行

声明B获得的tag1(具有一个文本节点的列表)的子节点执行时,选择第一(只)文本节点并显示其文本值。

在这种情况下,他们是同样的事情。

+0

红心!那么你能告诉我,如何检查它下面是否没有标签。我的意思的东西,不来< > – madhairsilence

+0

之间检查返回列表中的每个节点的节点类型。查看Javadoc中的'org.w3c.dom.Node'获取节点类型列表。 –

+0

@madhairsilence:这里的大图是什么?你想达到什么目的? –

3

documentation of Node.getTextContent(),对于ELEMENT_NODE节点类型:

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

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

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

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

就会有两个子文本节点和一个子元素节点,其结果将是“1 2”(也可能是“12”;我不知道如何间距工作在这个连接,但你可以检查)。

这不是“本身包含”一个节点的问题 - 它只是什么此方法执行定义的问题。

+0

一些解释,请... – madhairsilence

+0

@madhairsilence:我不知道你的意思。我已经解释了为什么代码的行为方式如此:实现遵循文档。 –