Node.js XPath在双重条件下接受元素
我有一个来自OPC-UA的信息模型,用xml()编写。 从这个模型中,我想: 查看UAObject中的引用,仅当引用具有 1) 我要找的那个人 2) 有一个字段IsRecursive=“false” 我试着用这段代码来获取所有对象,这些对象都有一个指向我指定的nodeid的引用,它可以工作。 下面是它的代码:Node.js XPath在双重条件下接受元素,node.js,xml,xpath,opc-ua,Node.js,Xml,Xpath,Opc Ua,我有一个来自OPC-UA的信息模型,用xml()编写。 从这个模型中,我想: 查看UAObject中的引用,仅当引用具有 1) 我要找的那个人 2) 有一个字段IsRecursive=“false” 我试着用这段代码来获取所有对象,这些对象都有一个指向我指定的nodeid的引用,它可以工作。 下面是它的代码: var ObjectsName2 = select( "//ns1:References/ns1:Reference[.=" + formatted
var ObjectsName2 = select(
"//ns1:References/ns1:Reference[.=" +
formatted_id + "]/ancestor::ns1:UAObject/ns1:DisplayName/text()",
nodes,
false
);
现在,我想取一个具有特定nodeid且字段IsForward设置为“false”的节点。
所以我有一个双重条件,需要用AND来验证。
下面是我正在使用的代码:
var formatted_id = '"' + ParentNodeId + '"';
var negate = "false";
var ObjectsName = select(
"//ns1:References/ns1:Reference[.=" +
formatted_id +
"//@ns1:IsForward="+negate+"]/ancestor::ns1:UAObject/ns1:DisplayName/text()",
nodes,
false
);
错误的结果是空数组。
为了让大家更容易理解,这是一个例子,说明了我想要什么
假设您有这个xml条目,并且我要查找的节点是ns=1;i=15008:
<UAObject NodeId="ns=1;i=15024" BrowseName="2:ParameterSet" ParentNodeId="ns=1;i=15008">
<DisplayName>ParameterSet</DisplayName>
<Description>Flat list of Parameters</Description>
<References>
<Reference ReferenceType="HasComponent">ns=1;i=15061</Reference>
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=15008</Reference>
</References>
</UAObject>
参数集
参数的简单列表
ns=1;i=15061
i=58
i=78
ns=1;i=15008
如您所见,有一个名为“HasComponent”的引用,它指向我的节点(ns=1;i=15008)和IsForward=“false”
预期输出应为输出数组-->参数集中UAObject的显示名称
有人能帮我吗?所以你想找到
ReferenceType
的Reference
节点是HasComponent
和IsForward
是false
,从那以后,上一级找到DisplayName
const{transform}=require('camaro')
;(异步函数main(){
常量xml=`
参数集
参数的简单列表
ns=1;i=15061
i=58
i=78
ns=1;i=15008
`
常量模板={
名称:['//References/Reference[@ReferenceType=“HasComponent”和@IsForward=“false”],'../../DisplayName']
}
log(等待转换(xml,模板),null,4);
})()
出去
因此,您希望找到具有
ReferenceType
的ReferenceType
节点是HasComponent
和IsForward
节点是false
,从该节点向上1级查找DisplayName
const{transform}=require('camaro')
;(异步函数main(){
常量xml=`
参数集
参数的简单列表
ns=1;i=15061
i=58
i=78
ns=1;i=15008
`
常量模板={
名称:['//References/Reference[@ReferenceType=“HasComponent”和@IsForward=“false”],'../../DisplayName']
}
log(等待转换(xml,模板),null,4);
})()
出去
仅基于xpath,此表达式:
//Reference[@ReferenceType="HasComponent"][@IsForward="false"]
应选择
ns=1;示例xml中的i=15008
。仅基于xpath,此表达式:
//Reference[@ReferenceType="HasComponent"][@IsForward="false"]
应选择
ns=1;示例xml中的i=15008
。您使用的是哪个库?我正在使用来自的xpathnpm@AndreaFresa是卡马罗。我写它是为了搔痒你也有xpath的解决方案吗?我的所有代码都使用xpath库,更改它是一个问题。它应该类似于//References/Reference[@ReferenceType=“HasComponent”和@IsForward=“false”]
您使用的是哪个库?我正在使用来自的xpathnpm@AndreaFresa是卡马罗。我写它是为了搔痒你也有xpath的解决方案吗?我的所有代码都使用xpath库,更改它是一个问题。它应该类似于//References/Reference[@ReferenceType=“HasComponent”和@IsForward=“false”]