NODE-RED检索XML属性

时间:2016-03-07 12:33:17

标签: xml node.js node-red

我正在尝试使用NODE-RED从HTTP源获取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 .235294117647058'到我可以在我的NODE-RED函数中返回的var。

我能找到的几个特定的​​XML解析示例都是一个非常简单的截断字符串等工作,而不是利用现有的XML解析器来读取文档中的节点/属性。

2 个答案:

答案 0 :(得分:1)

假设您有一个由服务器返回的有效XML文档,那么您可以通过XML节点传递消息,这会将其解析为JSON对象,然后可以查询该结构中的任何值。

答案 1 :(得分: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 );