如何通过节点js中的xpath获取属性值

给定XML

<ValCredLookup> <ValCredName name="val-cred-api-cust"> <certificate thumbprint="12345"> <clientID id="1bbfea"> <Merchant-id>123456789</Merchant-id> </clientID> </certificate> </ValCredName> </ValCredLookup> 

如何使用xpath通过属性值获取证书或客户端ID? 我曾尝试过这样的事情

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

哪些工作,但如果我尝试

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

这不起作用。

另外我如何引用xpath中的variables

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

我真正需要做的是获取clientID下的元素,使用xpath属性名,指纹和id,这些都是variables。 喜欢这个

 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); 

确定了可变位

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

只需要string中的单引号,但只要有多个属性值的xpath语句,我不认为节点js xpath可以做到这一点。

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

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

我不知道您使用的库是否提供了一种更好的方式来访问XPath中的JSvariables。 如果不是,则可以连接JSvariables值来构造XPathexpression式,例如:

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