XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<matchineroot nodetype="machine">
<m_project nodetype="module" name="工程" address="ff" pNode="long/module/gsm/far_engineer1.xml">
</m_project>
<m_cpu nodetype="module" name="MCU参数" power="1" address="00" pNode="long/module/gsm/far_mcu.xml">
</m_cpu>
<m_digital nodetype="module" name="数字模块" power="1" address="ef" pNode="long/module/gsm/far_digital2.xml">
</m_digital>
<m_rf nodetype="module" name="小信号模块" power="1" address="01" pNode="long/module/gsm/far_if.xml">
</m_rf>
<m_pa nodetype="module" name="功放板" power="1" onekeycfg="1" address="e3" pNode="long/module/gsm/pa2.xml" >
</m_pa>
</matchineroot>
现在我要遍历根节点matchineroot节点下所有子节点并获得节点名,如果直接用DOM遍历节点的方法输出的节点名不仅包含文档中所有子节点名,还会输出很多<#text>,事实上
node instanceof Text的场合:输出是:#text,
node instanceof Element的场合:输出是:标签名,所以要加一个节点类型的判断才可以只输出节点名,即
if (nodes.item(j) instanceof Element),完整代码如下:
var root = xmlDoc.getElementsByTagName("matchineroot");
for (i = 0; i < root.length; i++) {
var nodeItem = root.item(i);
var nodes = nodeItem.childNodes;
for (j = 0; j < nodes.length; j++) {
if (nodes.item(j) instanceof Element) {//判断是否属于属性节点,如果不加判断则会循环出text节点
nodeName = nodes.item(j).nodeName;
name = xmlDoc.getElementsByTagName(nodeName)[0].getAttribute("name");
if (module == name) {//通过判断查询的模块进一步查找相应的xml文档节点名
pNode = xmlDoc.getElementsByTagName(nodeName)[0].getAttribute("pNode");
break;
}
}
}
}