用于从XML中提取XML对象/部分的Xpath表达式
我试图通过提取有效负载XML的一部分来设置一个变量。但是这个xpath表达式只适用于简单的子节点,而不适用于具有子节点的元素 预期:需要记录以下请求XML的“cde”元素的所有子节点。 这两种方法都不起作用用于从XML中提取XML对象/部分的Xpath表达式,xml,xpath,mule,Xml,Xpath,Mule,我试图通过提取有效负载XML的一部分来设置一个变量。但是这个xpath表达式只适用于简单的子节点,而不适用于具有子节点的元素 预期:需要记录以下请求XML的“cde”元素的所有子节点。 这两种方法都不起作用 <logger level="INFO" message=" approach1: #[xpath://*[local-name()='abc']/*[local-name()='cde']]" /> <logger level="INFO" message=" appro
<logger level="INFO" message=" approach1: #[xpath://*[local-name()='abc']/*[local-name()='cde']]" />
<logger level="INFO" message=" approach2: #[xpath('//abc/cde/node()').text]" />
输入XML:
<abc>
<def>def123</def>
<cde>
<ghf>ghf123</ghf>
</cde>
</abc>
def123
ghf123
除了使用XSLT,还有其他方法提取xml的一部分吗?groovy evaluator可以与之配合使用吗
编辑:
预期:cde元素的所有内容都是必需的 我认为提取值没有问题 您可以使用
#[xpath://.[xpath:local-name()='abc']/*[xpath:local-name()='cde']/*[xpath:local-name()='ghf'].
来提取ghf的值
下面是一个提取
值的简单示例。这将有助于:
<flow name="Flotttt" doc:name="Flow1WithoutUsingNameSpaceManager">
<file:inbound-endpoint responseTimeout="10000" connector-ref="File_Input" doc:name="File" path="E:\backup\test">
<file:filename-regex-filter pattern="aa.xml" caseSensitive="false" />
</file:inbound-endpoint>
<logger message="Trying to process : #[xpath://.[xpath:local-name()='abc']/*[xpath:local-name()='cde']/*[xpath:local-name()='ghf']]" level="INFO" doc:name="Logger" />
<choice doc:name="Choice">
<when expression="#[xpath://.[xpath:local-name()='abc']/*[xpath:local-name()='cde']/*[xpath:local-name()='ghf'] ='ghf123']">
<processor-chain doc:name="Processor Chain">
<logger message="[WithoutUsingNameSpaceManager] MATCH" level="INFO" doc:name="Logger" />
</processor-chain>
</when>
<otherwise>
<processor-chain doc:name="Processor Chain">
<logger message="NO MATCH" level="INFO" doc:name="Logger" />
</processor-chain>
</otherwise>
</choice>
</flow>
您将在记录器中获得
的值。。。您可以使用这种方法记录“cde”元素的所有子节点。我不熟悉Mule,但是
“cde”元素的所有子节点
在“所有子节点”的情况下,您指的是所有元素子节点:
"//cde/*"
否则,如果您真正指的是任何类型的节点:
"//cde/node()"
如果希望完全使用XPATH获取元素,请使用以下命令
<logger level="INFO" message=" approach1: #[xpath('//abd/cde')]"/>
注意:这将为您提供org.dom4j.tree.DefaultElement对象数组的输出,每个直接子元素一个
希望这能有所帮助。乌龟,我看到您正在使用“文本”属性。您访问过innerXML吗?我需要整个cde元素,而不仅仅是ghf的值。必须捕获“ghf123”,而不仅仅是ghf中的值。您所说的“ghf123”是什么意思?是否要在Logger中捕获整个结构?是。。。cde元素中的整个结构这些XPATH表达式对于Mule来说已经过时,请改用MEL。
<cde>
<ghf>ghf123</ghf>
</cde>
#[xpath('//abd/cde/*')]"