Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js XPath在双重条件下接受元素_Node.js_Xml_Xpath_Opc Ua - Fatal编程技术网

Node.js XPath在双重条件下接受元素

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

我有一个来自OPC-UA的信息模型,用xml()编写。 从这个模型中,我想: 查看UAObject中的引用,仅当引用具有 1) 我要找的那个人 2) 有一个字段IsRecursive=“false”

我试着用这段代码来获取所有对象,这些对象都有一个指向我指定的nodeid的引用,它可以工作。 下面是它的代码:

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”]