childNodes上的JavaScript XPath,evaluate不是函数



我使用纯JavaScript来使用DOMParser解析xml结果。我想对某些节点进行迭代,并对每个节点进行一些处理。

问题是,在通过childNodes获得有问题的节点后,我无法在这些节点上运行XPath求值。我是否必须以某种方式再次将节点强制转换为xml?或者可能使用不同的功能?

我在SQL Server中有一些使用xpath的经验,但在JavaScript中没有,所以这可能是一个非常愚蠢的问题。

这是我的xml

<result>
<entry>
<component typeCode="COMP">
<sequenceNumber value="1" />
<observation classCode="OBS" moodCode="DEF">
<code displayName="StartDate" code="CODE_041" />
<value xsi:type="TS" />
</observation>
</component>
<component typeCode="COMP">
<sequenceNumber value="2" />
<observation classCode="OBS" moodCode="DEF">
<code displayName="Amount" code="CODE_045" />
<value xsi:type="PQ" value="000000000000000.00" />
</observation>
</component>
</entry>
</result>

和javascript代码

parser = new DOMParser();
xmlDoc = parser.parseFromString(xmltext, "text/xml");
var ent = xmlDoc.getElementsByTagName("entry");
// get child nodes
var chil = ent[0].childNodes;
for (var c = 0; c < chil.length; c++) {
var nod = chil[c];
// component
if (nod.tagName == "component") {
// error "evaluate is not a function"
var field_code = nod.evaluate("/observation/code[@code]", nod, null, XPathResult.ANY_TYPE, null);
var field_name = nod.evaluate("/observation/code[@displayName]", nod, null, XPathResult.ANY_TYPE, null);
};
};

我不明白为什么会发生这种情况(xpath应该一直有效(,但由于我可以用另一种方式获得最终结果,我想我还不如发布它,以防它有帮助。如果没有,我想不会造成伤害。

xpath = require('xpath')
, dom = require('xmldom').DOMParser; 
let xmlDoc = new dom().parseFromString(xmltext);
let ent = xpath.select("//component//observation/code", xmlDoc);
for (let [key, value] of Object.entries(ent)) {
let field_code = `${value.getAttribute('code')}`;
let field_name = `${value.getAttribute('displayName')}`;
console.log('field code: ',field_code,'display name: ',field_name)
}

输出:

field code:  CODE_041 display name:  StartDate
field code:  CODE_045 display name:  Amount

最新更新