2016-03-07 232 views
0

我试图使用节点RED抓住从HTTP源XML文档并解析文档/检索包含温度读数的特定属性。NODE-RED检索XML属性

这是源XML:

<realval="20.235294117647058"status="unacked"href="http://172.16.7.1/obix/config/Drivers/NiagaraNetwork/TrBoard/points/FieldSide_Temp/"is="/obix/def/control:NumericPoint obix:Point"display="20.2 °C {unackedAlarm} @ 16"icon="/ord?module://icons/x16/control/numericPoint.png"unit="obix:units/celsius"xsi:schemaLocation="http://obix.org/ns/schema/1.0 /obix/xsd"> 
<strname="facets"val="units=u:celsius;°C;(K);+273.15;|precision=i:1|min=d:-inf|max=d:+inf"href="facets/"display="units=°C,precision=1,min=-inf,max=+inf"displayName="Facets"writable="true"></str> 
<refname="proxyExt"href="proxyExt/"is="/obix/def/niagaraDriver:NiagaraProxyExt"display="slot:/Software/FieldSide_Temp"displayName="Proxy Ext"icon="/ord?module://icons/x16/control/controlExtension.png"></ref> 
<realname="out"val="20.235294117647058"status="unacked"href="out/"is="/obix/def/baja:StatusNumeric"display="20.2 °C {unackedAlarm} @ 16"displayName="Out"icon="/ord?module://icons/x16/statusNumeric.png"unit="obix:units/celsius"> </real> 
</real> 

我希望得到的是'20从这个文件到一个变种,我可以在我的NODE-RED功能返回0.235294117647058' 。

少数特定的XML解析例子我能找到的都做了斩波串等,而不是采取现有的XML解析器可以读取节点的优势非常体力劳动从文档/属性。

+0

这不是一个有效的XML文档 - 也许双重检查和复制/粘贴一次?一旦你得到了一个有效的XML文档,你可能会想看看PIXL-XML:https://www.npmjs.com/package/pixl-xml ...它我选择的库中的节点处理XML。 – binarymax

回答

0

一旦修正XML的格式,并使用PIXL-XML库(https://www.npmjs.com/package/pixl-xml),解析这一点,并得到真正的VAL很简单:

var XML = require('pixl-xml'); 

var xml_string = '<real val="20.235294117647058" status="unacked" href="http://172.16.7.1/obix/config/Drivers/NiagaraNetwork/TrBoard/points/FieldSide_Temp/" is="/obix/def/control:NumericPoint obix:Point" display="20.2 °C {unackedAlarm} @ 16" icon="/ord?module://icons/x16/control/numericPoint.png" unit="obix:units/celsius" xsi:schemaLocation="http://obix.org/ns/schema/1.0 /obix/xsd"><str name="facets" val="units=u:celsius;°C;(K);+273.15;|precision=i:1|min=d:-inf|max=d:+inf" href="facets/" display="units=°C,precision=1,min=-inf,max=+inf" displayName="Facets" writable="true"></str><ref name="proxyExt" href="proxyExt/"is="/obix/def/niagaraDriver:NiagaraProxyExt" display="slot:/Software/FieldSide_Temp" displayName="Proxy Ext" icon="/ord?module://icons/x16/control/controlExtension.png"></ref><real name="out" val="20.235294117647058" status="unacked" href="out/" is="/obix/def/baja:StatusNumeric" display="20.2 °C {unackedAlarm} @ 16" displayName="Out" icon="/ord?module://icons/x16/statusNumeric.png" unit="obix:units/celsius"> </real></real>'; 

var doc = XML.parse(xml_string); 
console.log(doc.real.val); 
+0

您不能在Node-RED中轻松使用任意npm包。您需要将它们包装在Node-RED节点中或将它们包含在settings.js中,以便将它们添加到函数节点的上下文中 – hardillb

1

假设你有一个有效的XML文档返回由服务器然后就可以通过XML节点将消息传递,这将它解析成,然后可以询问在结构的任何值的JSON对象。