我是否缺少处理wso2esb序列中xpath表达式的步骤?
我已经把这件事搞了几个小时了,我不知道问题出在哪里。现在,我只是尝试记录从代理传递到序列的XML文件的xpath表达式的结果。到目前为止,我的表达式没有任何记录。我以几种不同的方式更改了表达式和名称空间,但我无法获得显示在日志中的信息。我可以看到完整的XML文件被记录,但不能看到我试图用xpath提取的数据。当我在插件中运行xpath时,我能够很好地提取数据,因此我认为实际表达式没有问题 有人能把我推向正确的方向吗?我猜这可能是XML格式或名称空间的问题,但我不是100%确定 多谢各位 序列我是否缺少处理wso2esb序列中xpath表达式的步骤?,xpath,sequence,wso2esb,Xpath,Sequence,Wso2esb,我已经把这件事搞了几个小时了,我不知道问题出在哪里。现在,我只是尝试记录从代理传递到序列的XML文件的xpath表达式的结果。到目前为止,我的表达式没有任何记录。我以几种不同的方式更改了表达式和名称空间,但我无法获得显示在日志中的信息。我可以看到完整的XML文件被记录,但不能看到我试图用xpath提取的数据。当我在插件中运行xpath时,我能够很好地提取数据,因此我认为实际表达式没有问题 有人能把我推向正确的方向吗?我猜这可能是XML格式或名称空间的问题,但我不是100%确定 多谢各位 序列 &
<sequence xmlns="http://ws.apache.org/ns/synapse" name="MySequence">
<log level="custom">
<property name="sequence" value="MySequence"></property>
</log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="filename" expression="get-property('transport', 'FILE_NAME')"></property>
<log level="custom">
<property xmlns:ns="http://org.apache.synapse/xsd" name="show-name" expression="get-property('filename')"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="file-name" expression="get-property('targetfilename')"></property>
</log>
<log level="custom">
<property xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:ns="http://org.apache.synapse/xsd" xmlns:z="RowsetSchema"
name="sequenceExp" expression="count(//xml/rs:data/z:row)"></property>
</log>
<property xmlns:ns2="http://org.apache.synapse/xsd"
xmlns:ns="http://org.apache.synapse/xsd"
name="transport.vfs.ReplyFileName" expression="fn:concat(get-
property('SYSTEM_DATE', 'yyMMddHHmmss'), '-',
get-property('filename'))"
scope="transport"></property>
<property name="OUT_ONLY" value="true"></property>
<send>
<endpoint name="FileEpr">
<address uri="vfs:file:///var/process/rrout"></address>
</endpoint>
</send>
</sequence>
----------编辑
您可以通过将代理中的contentType更改为“application/xml”来解决此问题
我能想到一些事情,为什么它会破裂:
rs:data
,而不是包括xml
根节点和整个模式的全部数据expression="count(/*//*[local-name(.) = 'data']/*[local-name(.) = 'row'])"
(在结构与您显示的结构不同的情况下,在根节点之后添加<代码> //<代码>),如果失败,请考虑使用更荒谬的东西来确保XPath甚至被评估:
expression="concat('Hello world, count words: ', //@iWordCount[1])"
由于属性不在名称空间中,因此应该输出iWordCount
的第一个值。如果它返回空,您就知道您认为的文档有焦点,而没有焦点。以下是查找前三个元素名称的方法:
expression="concat('Hello: ', name(/*[1]), name(/*/*[2]), name(/*/*/*[1])"
这应该输出:“Hello:xmlrs:data z:row”
如果没有,它至少应该指出您实际查看的数据。感谢您的回复Abel。今天我又把它弄得一团糟,我注意到XML的格式在进入序列时发生了变化。我注意到它现在包含一个soap和文本标记'@john,这是因为它在Web服务调用中使用,这需要将它包装在一个有效的soap信封中。@john,我向您展示的第一个表达式将起作用,即使它周围有soap信封。这解决了你的问题吗?如果是这样的话,你可以把这个标记为答案和/或投赞成票。它不起作用。我已经试了一整天了,我能找到的两个元素是“soapenv=”和“text”。它根本就没有抓住任何其他元素。甚至当我运行firefox的xpath插件时也没有。我注意到我的代理正在将contentType设置为text/plain。我尝试将其更改为text/xml,但出现了一个错误,说明格式错误。它需要soap元素。我认为text/xml同时适用于普通xml和soap。我尝试将messageBuilder更改为“org.wso2.carbon.relay.BinaryRelayBuilder”,尝试将文件视为传递,但它仍然将xml包装在soap元素中。我正在使用VFS从目录中提取一个平面xml文件,以便处理xml元素。
expression="concat('Hello world, count words: ', //@iWordCount[1])"
expression="concat('Hello: ', name(/*[1]), name(/*/*[2]), name(/*/*/*[1])"