【问题标题】:NODE-RED Retrieve XML attributesNODE-RED 检索 XML 属性
【发布时间】:2023-03-25 19:31:02
【问题描述】:

我正在尝试使用 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 解析器。

【问题讨论】:

  • 这不是一个有效的 XML 文档 - 可能再次检查并复制/粘贴?获得有效的 XML 文档后,您可能需要查看 pixl-xml:npmjs.com/package/pixl-xml ...它是我在节点中使用 XML 的首选库。

标签: xml node.js node-red


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    一旦你修复了 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 );
    

    【讨论】:

    • 你不能轻易在 Node-RED 中使用任意 npm 包。您需要将它们包装在 Node-RED 节点中或将它们包含在 settings.js 中,以便将它们添加到函数节点的上下文中
    猜你喜欢
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多