无法从 OpcUa 节点集中使用 xpath 检索元素
Can't retrieve elements with xpath from an OpcUa Nodeset
我正在尝试使用 xpath 查询此 XML 文件 (https://github.com/OPCFoundation/UA-Nodeset/blob/master/Robotics/Opc.Ua.Robotics.NodeSet2.xml)。
我试图获取标签 "UANodeSet" 内的所有元素,但我总是得到一个空的 return。
我正在使用节点 js
这是我的代码:
nodes = fs.readFileSync(Nodeset+".xml", "utf-8");
var data = xpath.select("//UANodeSet", nodes)
fs.writeFileSync("./data.xml" , data);
我使用的库来自 npm,名为 xpath。
期望 UANodeSet 中包含所有子元素,实际情况是我有一个空的 return。
你知道怎么解决吗?
抱歉,第一次使用 xpath。
好了,第一题做完了。
现在我正在尝试检索所有 UAObjectType,但似乎 xml 输出格式确实错误,我不知道为什么。
这是代码:
var select = xpath.useNamespaces({"ns" : "http://www.w3.org/2001/XMLSchema-instance" , "ns1" : "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" , "ns2" : "http://opcfoundation.org/UA/2008/02/Types.xsd", "ns3" : "http://www.siemens.com/OPCUA/2017/SimaticNodeSetExtensions" ,"ns4" : "http://www.w3.org/2001/XMLSchema" });
var data = select('//ns1:UAObjectType' , ns)
fs.writeFileSync("./data.xml" , data);
有谁知道怎么解决吗?
xml 文件使用命名空间,这似乎使 xpath 表达式出错。试试这样的东西,看看它是否有效:
dom = require('xmldom').DOMParser
var doc = new dom().parseFromString(nodes)
var targets = xpath.select("//*[local-name()='UAObject']", doc)
另一个解决方案是:
var select = xpath.useNamespaces({"ns1" : "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" });
var data = select('//ns1:UAObjectType' , ns)
我正在尝试使用 xpath 查询此 XML 文件 (https://github.com/OPCFoundation/UA-Nodeset/blob/master/Robotics/Opc.Ua.Robotics.NodeSet2.xml)。 我试图获取标签 "UANodeSet" 内的所有元素,但我总是得到一个空的 return。 我正在使用节点 js 这是我的代码:
nodes = fs.readFileSync(Nodeset+".xml", "utf-8");
var data = xpath.select("//UANodeSet", nodes)
fs.writeFileSync("./data.xml" , data);
我使用的库来自 npm,名为 xpath。
期望 UANodeSet 中包含所有子元素,实际情况是我有一个空的 return。 你知道怎么解决吗?
抱歉,第一次使用 xpath。
好了,第一题做完了。 现在我正在尝试检索所有 UAObjectType,但似乎 xml 输出格式确实错误,我不知道为什么。 这是代码:
var select = xpath.useNamespaces({"ns" : "http://www.w3.org/2001/XMLSchema-instance" , "ns1" : "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" , "ns2" : "http://opcfoundation.org/UA/2008/02/Types.xsd", "ns3" : "http://www.siemens.com/OPCUA/2017/SimaticNodeSetExtensions" ,"ns4" : "http://www.w3.org/2001/XMLSchema" });
var data = select('//ns1:UAObjectType' , ns)
fs.writeFileSync("./data.xml" , data);
有谁知道怎么解决吗?
xml 文件使用命名空间,这似乎使 xpath 表达式出错。试试这样的东西,看看它是否有效:
dom = require('xmldom').DOMParser
var doc = new dom().parseFromString(nodes)
var targets = xpath.select("//*[local-name()='UAObject']", doc)
另一个解决方案是:
var select = xpath.useNamespaces({"ns1" : "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" });
var data = select('//ns1:UAObjectType' , ns)