如何在WSO2中使用XPath提取属性内XML的Origin节点或值
在WSO2中提取XML里的Origin节点或其值的方法
你有一个名为body的属性,其值为如下XML内容:
<?xml version="1.0" encoding="UTF-8"?> <request xmlns="http://api-v1.gen.mm.example.com/mminterface/request"> <Transaction> <Origin>country 1</Origin> </Transaction> </request>
以下是在WSO2中通过XPath提取目标内容的具体方法:
一、提取完整的Origin节点
方法1:绑定命名空间(推荐)
先在序列(Sequence)中声明命名空间前缀,将ns绑定到XML的目标命名空间:
<sequence xmlns:ns="http://api-v1.gen.mm.example.com/mminterface/request" name="ExtractOriginNode"> <!-- 后续中介逻辑 --> </sequence>
使用如下XPath表达式提取节点:
//ns:Transaction/ns:Origin
提取结果:
<Origin>country 1</Origin>
方法2:不绑定命名空间(兼容场景)
如果无法提前声明命名空间,可通过local-name()匹配节点名称:
//*[local-name()='Transaction']/*[local-name()='Origin']
提取结果与方法1一致。
二、提取Origin节点的文本值
方法1:绑定命名空间(推荐)
使用带text()的XPath表达式:
//ns:Transaction/ns:Origin/text()
提取结果:
country 1
方法2:不绑定命名空间
同样通过local-name()匹配节点:
//*[local-name()='Transaction']/*[local-name()='Origin']/text()
提取结果与方法1一致。
实际使用示例(Property中介)
在WSO2中介中,可通过Property节点将提取结果保存到新属性:
<sequence xmlns:ns="http://api-v1.gen.mm.example.com/mminterface/request" name="ExtractOriginSequence"> <!-- 提取节点值到OriginValue属性 --> <property name="OriginValue" expression="//ns:Transaction/ns:Origin/text()" scope="default" type="STRING"/> <!-- 提取完整节点到OriginNode属性 --> <property name="OriginNode" expression="//ns:Transaction/ns:Origin" scope="default" type="OM"/> </sequence>
内容的提问来源于stack exchange,提问作者NxN
相关产品推荐
相关产品推荐

