Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从XML中提取XML对象/部分的Xpath表达式_Xml_Xpath_Mule - Fatal编程技术网

用于从XML中提取XML对象/部分的Xpath表达式

用于从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

我试图通过提取有效负载XML的一部分来设置一个变量。但是这个xpath表达式只适用于简单的子节点,而不适用于具有子节点的元素

预期:需要记录以下请求XML的“cde”元素的所有子节点。 这两种方法都不起作用

<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/*')]"