我正在尝试从XML字符串中检索“代码”和“值”。
我有以下XML字符串:
<items>
<item>
<id>55</id>
<attributes>
<attribute>
<code>ID</code>
<value><![CDATA[55]]></value>
</attribute>
<attribute>
<code>Chip_ID</code>
<value><![CDATA[1]]></value>
</attribute>
<attribute>
<code>FilterKey</code>
<value><![CDATA[5]]></value>
</attribute>
<attribute>
<code>DateTime</code>
<value><![CDATA[22/12/2014 12:21:25]]></value>
</attribute>
</attributes>
</item>
</items>
然后我有以下javaScript来识别每个节点:
var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
xmlDocument.async = false;
xmlDocument.loadXML(pXML);
var oFirstNode = xmlDocument.documentElement;
var item = oFirstNode.childNodes[0]; //10 of these and they represent the items
//alert("1 "+item.nodeName);
var ID = item.childNodes[0]; //one of these for each level-ID - NO CHILDREN
var attributes = item.childNodes[1]; //one of these for each level-attributes
//alert("2 " + ID.nodeName);
//alert("2 " + attributes.nodeName);
var attribute = attributes.childNodes[0];//4 of these for each level and they all have 2 children-code and value
//alert("3 " + attribute.nodeName);
var code = attribute.childNodes[0];
var value = attribute.childNodes[1];
alert(code.nodeName);
alert(value.nodeName);
我知道我在正确的节点,因为警报框都给出了预期值。
我现在想要检索'code'和'value'的文本,例如第一个条目应该返回code = ID value =![CDATA [55]]
我试过了:
alert(code.nodeValue);
alert(value.nodeValue);
但他们都回来了。
答案 0 :(得分:4)
DOM元素的.nodeValue
属性为always null。
改为使用.textContent
。
alert(code.textContent);
我还建议使用DOM遍历方法,不要求通过索引筛选每个子节点:
var attributes = item.getElementsByTagName("attribute"); // should contain 4 elements
答案 1 :(得分:0)
我找到了答案。由于某种原因,它将标记内的值视为元素的子元素,因此nodeValue返回我想要的值。以下是我的工作解决方案:
var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
xmlDocument.async = false;
xmlDocument.loadXML(pXML);
var oFirstNode = xmlDocument.documentElement;
var item = oFirstNode.childNodes[0]; //10 of these and they represent the items
var ID = item.childNodes[0]; //one of these for each level-ID - NO CHILDREN
var attributes = item.childNodes[1]; //one of these for each level-attributes
alert(attributes.childNodes.length);
var attribute = attributes.childNodes[0];//4 of these for each level and they all have 2 children-code and value
//alert("3 " + attribute.nodeName);
var code = attribute.childNodes[0];
var value = attribute.childNodes[1];
alert(code.childNodes[0].nodeValue)
alert(value.childNodes[0].nodeValue)
}