关于node.js:如何在Node JS中使用XPath通过属性值获取

How do I get by attribute value with xpath in node js

给定的XML

1
2
3
4
5
6
7
8
9
<ValCredLookup>
  <ValCredName name="val-cred-api-cust">
    <certificate thumbprint="12345">
        <clientID id="1bbfea">
            <Merchant-id>123456789</Merchant-id>
        </clientID>            
    </certificate>        
  </ValCredName>
</ValCredLookup>

如何使用xpath通过属性值获取证书或clientID? 我已经尝试过类似的东西

1
2
3
doc = new xmldom().parseFromString(data, 'application/xml');
var xpath = require('xpath');
var valcredname = xpath.select("/ValCredLookup/ValCredName/@name='valcred-api-cust'", doc);

哪个可行,但是如果我尝试

1
var valcredname = xpath.select("/ValCredLookup/ValCredName/@name='val-cred-api-cust'/certificate", doc);

这行不通。

另外我如何在xpath中引用变量

1
2
var vcname = 'valcred-api-cust';
var nodes = xpath.select("/ValCredLookup/ValCredName/@name=????, doc);

我真正需要做的是获取带有xpath的clientID下的clientID元素,该元素使用属性名,指纹和id,这些属性都是变量。 像这样

1
2
3
4
var vc = 'val-cred-api-cust';
var tp = '12345';
var id = 1bbfea';
var nodes = xpath.select("/ValCredLookup/ValCredName/@name=vc/certificate/@thumbprint=tp/clientID/@id=id, doc);

确定找出可变位

1
var vc ="'val-cred-api-cust'";

我只需要字符串中的单引号,但是就涉及多个属性值的xpath语句而言,我认为node js xpath不能做到。


name属性值过滤ValCredName,然后返回相应的certificate元素的正确表达式是:

1
/ValCredLookup/ValCredName[@name='val-cred-api-cust']/certificate

我不知道您使用的库是否提供了更好的方法来访问XPath中的JS变量。 如果不是,则可以连接JS变量值以构造XPath表达式,例如:

1
2
3
var vc ="val-cred-api-cust";
var query ="/ValCredLookup/ValCredName[@name='" + vc +"']/certificate";
var valcredname = xpath.select(query, doc);