[请教]DOM解析XML:getFirstChild()和getNextSibling()的疑问
情况:
用DOM解析一XML文件,其中有用到XPath求值器
在解析中获取结点时,出现这种情况:明明应该得到的是DOCUMENT_NODE类型的结点,但是得到的是TEXT_NODE
.xml文件结构:
<?xml version="1.0" encoding="GB2312"?>
<category>
<pattern>你 家 在 [哪里|什么地方|什么位置]</pattern>
<template>
<random>
<li>你猜看</li>
<li>长沙啊</li>
<li>不告诉你</li>
</random>
</template>
</category>
</category>
<category>
<pattern>家庭 地址 是 多少</pattern>
<template>
<srai>你 家 在 [哪里|什么地方|什么位置]</srai>
</template>
</category>
JAVA代码:
Document document = getDocument();
Node rootNode = document.getFirstChild();
NodeList nodeCategorys = XPathAPI.selectNodeList(rootNode, "//category");
for (int i = 0; i < nodeCategorys.getLength(); i++){
if (nodeCategorys.item(i).hasChildNodes()){
Node template = XPathAPI.selectSingleNode(nodeCategorys.item(i), "template");
//【1】这行如果写成template.getFirstChild(),则templateChild就是TEXT_NODE类型
Node templateChild = template.getFirstChild().getNextSibling();
if (templateChild.getNodeName().equals("srai")) { continue; }
if (templateChild.getNodeName().equals("random")){
ItemVo vo = new ItemVo();
Node patternNode = nodeCategorys.item(i).getFirstChild().getNextSibling();//这行问题同【1】
String pattern = patternNode.getFirstChild().getNodeValue();//【2】
……
……
NodeList nodeLi = XPathAPI.selectNodeList(templateChild,"li");
for (int j = 0; j < nodeLi.getLength(); j++)
{
Node liNode = nodeLi.item(j);//【3】这里又不用加getNextSibling()了,取出的是DOCUMENT_NODE类型
String li = liNode.getFirstChild().getNodeValue();
}
……
……
关于DOM将文本也视为一个结点这个我知道,所以在【2】的地方用getFirstChild().getNodeValue()才取到<patter>标签的文本值。
但是【1】【3】两处出现的问题我就很不理解了,为什么一会要加getNextSibling()一会又不加,而且感觉原理上不对啊?
请各位大虾多多指教。我查了很多资料了,但是没找到我这种情况的,我看别人的代码都挺正常的啊……