Java getChildNodes给出了意外的结果
我的XML看起来像这样-Java getChildNodes给出了意外的结果,java,xml,dom,xml-parsing,sax,Java,Xml,Dom,Xml Parsing,Sax,我的XML看起来像这样- <collected_objects> <object flag="complete" id="objId" version="1"> <variable_value variable_id="varId">ValueGoesHere</variable_value> <reference item_ref="2"/> </objec
<collected_objects>
<object flag="complete" id="objId" version="1">
<variable_value variable_id="varId">ValueGoesHere</variable_value>
<reference item_ref="2"/>
</object>
<object comment="objComment" flag="complete" id="objId" version="1">
<reference item_ref="1"/>
</object>
</collected_objects>
我的问题是为什么“#的孩子是”分别是5岁和3岁?我不应该分别期待2和1吗?
因为第一个对象有“variable\u value
”和“reference
”,而第二个对象只有“reference
”
本质上,我的目的是处理“对象”的子对象。确保节点子对象之间没有空格。空格被视为子节点,并作为子节点返回 测试如果
childNode.getNodeType() == Node.ELEMENT_NODE
应该足够了。您只计算元素节点类型。如果您只对子元素感兴趣,可以更改代码以包含以下检查
if (aNode.getNodeType() == Node.ELEMENT_NODE)
{
...
}
这是因为在每个子节点之间有2个
TEXT\u节点
(#TEXT
)
以下内容包括文本节点及其相应的值
<object flag="complete" id="objId" version="1">
<TEXT_NODE />
<variable_value variable_id="varId">ValueGoesHere</variable_value>
<reference item_ref="2"/>
<TEXT_NODE />
</object>
其中,3=TEXT\u节点
和1=ELEMENT\u节点
if (aNode.getNodeType() == Node.ELEMENT_NODE)
{
...
}
<object flag="complete" id="objId" version="1">
<TEXT_NODE />
<variable_value variable_id="varId">ValueGoesHere</variable_value>
<reference item_ref="2"/>
<TEXT_NODE />
</object>
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document dom = dBuilder.parse(new ByteArrayInputStream(S.getBytes()));
NodeList collected_objects = dom.getElementsByTagName("object");
System.out.println("Number of collected objects are "
+ collected_objects.getLength());
for (int i = 0; i < collected_objects.getLength(); i++) {
Node aNode = collected_objects.item(i);
// get children of "objects"
NodeList refNodes = aNode.getChildNodes();
System.out.println("# of chidren are " + refNodes.getLength());
//
for (int x = 0; x < refNodes.getLength(); x++) {
Node n = refNodes.item(x);
System.out.println(n.getNodeType() + " = " + n.getNodeName() + "/" + n.getNodeValue());
}
// print attributes of "objects"
NamedNodeMap attributes = aNode.getAttributes();
for (int a = 0; a < attributes.getLength(); a++) {
Node theAttribute = attributes.item(a);
System.out.println(theAttribute.getNodeName() + "="
+ theAttribute.getNodeValue());
}
}
Number of collected objects are 2
# of chidren are 5
3 = #text/
1 = variable_value/null
3 = #text/
1 = reference/null
3 = #text/
flag=complete
id=objId
version=1
# of chidren are 3
3 = #text/
1 = reference/null
3 = #text/
comment=objComment
flag=complete
id=objId
version=1