Java 配置<;设置变量>;with xpath在从xml负载提取时提供空字符串

Java 配置<;设置变量>;with xpath在从xml负载提取时提供空字符串,java,xml,xpath,mule,flow,Java,Xml,Xpath,Mule,Flow,我正在开发一项服务,将请求中发送的详细信息添加到两个不同的队列中 为此,我使用提取部分XML而不干扰有效负载。 但这是一片空白 我的输入如下所示 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://example.org/HelloService"> <soapenv:Header/> <soapenv:Body>

我正在开发一项服务,将请求中发送的详细信息添加到两个不同的队列中

为此,我使用提取部分XML而不干扰有效负载。 但这是一片空白

我的输入如下所示

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://example.org/HelloService">
   <soapenv:Header/>
   <soapenv:Body>
     <AddRequest>
      <Person>
         <firstName>Test</firstName>
         <lastName>Tesst</lastName>
         <age>23</age>
      </Person>
      <Company>
         <companyName>Test</companyName>
         <state>Tesst</state>
         <zip>12345</zip>
      </Company>
     </AddRequest>
   </soapenv:Body>
</soapenv:Envelope>
知道它为什么提取空白而不是xml元素吗

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//Person" />                   
    </xsl:copy>     
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />                  
    </xsl:copy>     
</xsl:template>
如何使用XPATH从paylaod获取“Person”元素?

使用以下方法:

<set-variable value="#[xpath('//Person')]" variableName="person" />

编辑:

<set-variable value="#[xpath('//Person').text]" variableName="person" />

将返回元素的文本值(如果有)。

使用此选项:

<set-variable value="#[xpath('//Person')]" variableName="person" />

编辑:

<set-variable value="#[xpath('//Person').text]" variableName="person" />


将返回元素的文本值(如果有)。

尝试使用XSLT转换器提取xml元素

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//Person" />                   
    </xsl:copy>     
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />                  
    </xsl:copy>     
</xsl:template>

尝试使用XSLT转换器提取xml元素

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//Person" />                   
    </xsl:copy>     
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />                  
    </xsl:copy>     
</xsl:template>


它给了我org.dom4j.tree。DefaultElement@23194cf5[要素:]。这不符合我的目的。我需要Person元素作为XML。我已经更新了答案。请现在检查它是否符合您的目的..文本添加再次导致空白。调用作用域属性:person=I see,
.text
仅当元素有值时才会返回值。应该有一个转换器来将对象转换为xmlI,我甚至试过了。但是结果xml是dom4j的一个大的80行xml,而不是Person元素xml。根据example.org/HelloService/person…………它给了我org.dom4j.tree。DefaultElement@23194cf5[要素:]。这不符合我的目的。我需要Person元素作为XML。我已经更新了答案。请现在检查它是否符合您的目的..文本添加再次导致空白。调用作用域属性:person=I see,
.text
仅当元素有值时才会返回值。应该有一个转换器来将对象转换为xmlI,我甚至试过了。但是结果xml是dom4j的一个大的80行xml,而不是Person元素xml。根据example.org/HelloService/person………..@user1985027,我已经尝试过XSLT,它正在工作。我想直接在mule流中尝试一些东西,而不是离开流。@user1985027我已经尝试过XSLT,它正在工作。我想直接在骡子流中尝试一些东西,而不是离开骡子流。