2016-03-07 103 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對象。