0

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

为此,我使用在不干扰有效负载的情况下提取部分 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>

我提取 Person 元素的部分流程如下。

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

    <logger level="INFO" message="#[flowVars['person']]" />     
    ........
    ......

但是记录器将其打印为空白

2013-01-30 12:56:08,287 INFO  [HelloService.stage1.02] processor.LoggerMessageProcessor (LoggerMessageProcessor.java:108) - 

知道为什么要提取空格而不是 xml 元素。

如何使用 XPATH 从 paylaod 中获取“Person”元素?

4

2 回答 2

4

用这个:

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

编辑:

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

将返回一个元素的文本值,如果它有一个。

于 2013-01-30T18:18:08.743 回答
-1

尝试使用 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>
于 2013-01-30T18:19:44.343 回答