我正在尝试对丢失或为空的XML标签的XML请求进行验证。我用了这段代码
<filter description="Validate material" regex=".+"
source="//E1MARAM[not(MATNR)] | //E1MARAM/MATNR[not(text())]">
<then>
<log category="WARN">
<property name="/material"
value="validation-empty tag MATNR send back to SAP" />
</log>
<property name="HTTP_SC" scope="axis2" type="STRING"
value="500" />
<makefault version="soap11">
<code value="soap11Env:VersionMismatch" xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" />
<reason value="Missing SAP parameter" />
<detail>MATNR</detail>
</makefault>
<respond />
</then>
</filter>
很好地检查XML标签//E1MARAM/MATNR
我的问题是,这仅在标记为空时才有效。
看来带有reqex。+和xpath //E1MARAM[not(MATNR)]
的Filter中介器不符合条件,因此检查不起作用
知道为什么吗?还是另一个想法,如何在WSO2 ESB中更好地对缺少XSD的XML标记或值进行验证?无法使用XSD架构,因为XML请求没有固定的结构-这是SAP iDoc的典型
答案 0 :(得分:1)
最简单的方法是检查非空字符串”。无论是空的还是缺失的,这都将解析为false。另外,您不必使用正则表达式进行检查,而只需使用xpath。如果为过滤器介体提供xpath表达式,它将像检查布尔值一样对其进行解析。
<filter description="Validate material" xpath="not(//E1MARAM/MATNR!=''") >
如果元素为空或不存在,则返回true。如果有文本值,它将返回false。