首页 > 解决方案 > xpath xml根据兄弟值取第一个值

问题描述

我有一个逻辑应用程序,用于在下面显示的 XML 中获取值。我需要获取包含“ID 更改”文本的第一个 ws:Transaction_Entry_Moment,并且 ws:Is_Rescind_Or_Rescinded 值必须为“false”

<ws:Transaction_Log_Data>      
  <ws:Transaction_Log_Entry>
    <ws:Transaction_Log_Description>Change Contacts for: XYZ</ws:Transaction_Log_Description>
    <ws:Transaction_Entry_Moment>2020-11-05T20:25:58.439-08:00</ws:Transaction_Entry_Moment>
    <ws:Is_Rescind_Or_Rescinded>false</ws:Is_Rescind_Or_Rescinded>
  </ws:Transaction_Log_Entry>
  <ws:Transaction_Log_Entry>
    <ws:Transaction_Log_Description>ID Change: XYZ</ws:Transaction_Log_Description>
    <ws:Transaction_Entry_Moment>2020-11-05T20:25:58.439-08:00</ws:Transaction_Entry_Moment>
    <ws:Is_Rescind_Or_Rescinded>false</ws:Is_Rescind_Or_Rescinded>
  </ws:Transaction_Log_Entry>
  <ws:Transaction_Log_Entry>
    <ws:Transaction_Log_Description>ID Change: XYZ</ws:Transaction_Log_Description>
    <ws:Transaction_Entry_Moment>2020-11-05T20:25:58.439-08:00</ws:Transaction_Entry_Moment>
    <ws:Is_Rescind_Or_Rescinded>false</ws:Is_Rescind_Or_Rescinded>
  </ws:Transaction_Log_Entry>      
</ws:Transaction_Log_Data>

我在我的逻辑应用程序中使用了以下 xpath,它返回空

"DATE": "@xpath(xml(triggerBody()), 'string(/*[local-name()=\"Transaction_Log_Data\"]/*[local-name()=\"Transaction_Log_Entry\"]/*[local-name()=\"Is_Rescind_Or_Rescinded\" and .= \"false\" and contains(@*[local-name()=\"Transaction_Log_Description\"], \"ID Change\")][position() = 1]/../*[local-name()=\"Transaction_Entry_Moment\"])')"

如果我删除 xpath 中的包含,如下所示,它会获取我的第一个 ws:Is_Rescind_Or_Rescinded,它是“假”的

"DATE": "@xpath(xml(triggerBody()), 'string(/*[local-name()=\"Transaction_Log_Data\"]/*[local-name()=\"Transaction_Log_Entry\"]/*[local-name()=\"Is_Rescind_Or_Rescinded\" and .= \"false\"][position() = 1]/../*[local-name()=\"Transaction_Entry_Moment\"])')"

我正在使用的包含有问题吗?什么是实现这一目标的正确方法?

标签: xpathcontainsazure-logic-apps

解决方案


  1. @用于指向属性而不是元素
  2. 谓词应用于错误的元素

尝试这个

'string(/*[local-name()=\"Transaction_Log_Data\"]/
   *[local-name()=\"Transaction_Log_Entry\" and contains(*[local-name()=\"Transaction_Log_Description\"], \"ID Change\")]/
      *[local-name()=\"Is_Rescind_Or_Rescinded\" and .= \"false\" ][position() = 1]/../
          *[local-name()=\"Transaction_Entry_Moment\"])' 

推荐阅读