首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >filter mediator中的XPath表达

filter mediator中的XPath表达
EN

Stack Overflow用户
提问于 2019-10-28 19:02:42
回答 1查看 162关注 0票数 1

我正在使用WSO2企业服务总线来处理和分发HL7。我想根据它的内容过滤HL7。ESB中的消息传递是:

代码语言:javascript
复制
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<hl7:message xmlns:hl7="http://wso2.org/hl7">
<ADT_A01 xmlns="urn:hl7-org:v2xml">
    <MSH>
        <MSH.1>|</MSH.1>
        <MSH.2>^~\&amp;</MSH.2>
        <MSH.3>
            <HD.1>HL7Soup</HD.1>
        </MSH.3>
        <MSH.4>
            <HD.1>Instance1</HD.1>
        </MSH.4>
        <MSH.5>
            <HD.1>HL7Soup</HD.1>
        </MSH.5>
        <MSH.6>
            <HD.1>Instance2</HD.1>
        </MSH.6>
        <MSH.7>
            <TS.1>200808181126</TS.1>
        </MSH.7>
        <MSH.8>SECURITY</MSH.8>
        <MSH.9>
            <MSG.1>ADT</MSG.1>
            <MSG.2>A04</MSG.2>
        </MSH.9>
        <MSH.10>MSG00001</MSH.10>
        <MSH.11>
            <PT.1>P</PT.1>
        </MSH.11>
        <MSH.12>
            <VID.1>2.5.1</VID.1>
        </MSH.12>
    </MSH>
    ...................
    </ADT_A01.INSURANCE>
</ADT_A01></hl7:message></soapenv:Body></soapenv:Envelope>

我想根据内容过滤HL7邮件。如果ADT OK,则将其删除。我尝试使用下面的过滤器中介器,但它不起作用。它总是转到else分支:

代码语言:javascript
复制
<filter regex=".*ADT.*" source="//MSG.1[1]">
    <then>
        <log level="custom">
            <property name="ADT" value="Oui"/>
        </log>
    </then>
    <else>
        <log level="custom">
            <property name="ADT" value="Non"/>
        </log>
    </else>
</filter>

xpath表达式在像https://www.freeformatter.com/xpath-tester.html这样的在线测试器中工作,有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-28 21:11:35

请在您的使用案例中使用以下代理。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="filter-hl7"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <log level="custom">
            <property name="log1" value="API invoked"/>
         </log>
         <filter xmlns:hl7="http://wso2.org/hl7"
                 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                 xpath="contains(name(//soapenv:Envelope/soapenv:Body/hl7:message/*),'ADT')">
            <then>
               <log level="full">
                  <property name="log2" value="######### Xpath matched!"/>
               </log>
            </then>
            <else>
               <log level="full">
                   <property name="log3" value="########## Xpath did not match!"/>
               </log>
            </else>
         </filter>
         <respond/>
      </inSequence>
      <outSequence/>
      <faultSequence/>
   </target>
   <description/>
</proxy>

此Xpath在代理中工作。

代码语言:javascript
复制
contains(name(//soapenv:Envelope/soapenv:Body/hl7:message/*),'ADT')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58589760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档