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不能做到。
用
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); |