将具有String的xsl-param转换为xml节点,以便遍历各种节点



我有一个场景,我将把一个参数传递给XSLT,XSLT又是一个xml元素。但它将作为一个逃跑的charecters(<for<….)发送

我的要求是,我在其中有各种子节点,在这些子节点中我必须循环遍历它们并需要转换。请查找请求,参数。

请求.xml

     <retrievePaymentMethodsRequest>
        <!--Optional:-->
        <retrievePaymentMethodsRequestTO>
    <financialAccountID>3</financialAccountID>
           <bankCountryCode>1</bankCountryCode>
           <clientID>12345</clientID>
           <!--Optional:-->
           <device>003</device>
           <excludedLifeIndicator>003</excludedLifeIndicator>
           <financialAccountStatus>3</financialAccountStatus>
           <kindCode>003</kindCode>
           <notEndedIndicator>0</notEndedIndicator>
           <!--Optional:-->
           <requestMode>003</requestMode>
           <stateCode>003</stateCode>
        </retrievePaymentMethodsRequestTO>
     </retrievePaymentMethodsRequest>

xslt:的参数

<b xmlns:fs2="somescheama" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fga="anyvalue"> xmlns:fs2="any value" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="any location "&gt;
                          &lt;statusCode&gt;0&lt;/statusCode&gt;
                          &lt;errorMessage&gt;errorMessage&lt;/errorMessage&gt;
                          &lt;paymentMethodTypes&gt;
                            &lt;!-- NULL or any type code  01, 04 , 10 (sample not real) --&gt;
                            &lt;methodTypeCode&gt;01&lt;/methodTypeCode&gt;
                            &lt;!-- Possible values methodTypeDisplayName 
                                CREDIT_CARD,BANK_ACCOUNT,CASH,CHECK,CASH_EQUIVALENT
                             --&gt;
                            &lt;methodTypeDisplayName&gt;CREDIT_CARD&lt;/methodTypeDisplayName&gt;
                            &lt;!-- valid dollar amount --&gt;
                            &lt;maximumAmountPaid&gt;100.00&lt;/maximumAmountPaid&gt;
                          &lt;/paymentMethodTypes&gt;
                          &lt;paymentFormInfo&gt;
                            &lt;!-- NULL or any type code  01, 04 , 10 (sample not real) --&gt;
                            &lt;paymentMethodTypeCode&gt;01&lt;/paymentMethodTypeCode&gt;
                            &lt;!-- sample form id 1004854 , 1004874 , 1004889 , 1004875--&gt;
                            &lt;formId&gt;1004885&lt;/formId&gt;
                            &lt;!-- Not exactly sure just an assumption --&gt;
                            &lt;formLanguageRefId&gt;US&lt;/formLanguageRefId&gt;
                            &lt;!-- forn name : EFT_AUTHORIZATION --&gt;
                            &lt;formName&gt;EFT_AUTHORIZATION&lt;/formName&gt;
                            &lt;roleActivity&gt;
                              &lt;agentActivity&gt;
                                &lt;inOfficeRulesForActivity&gt;
                                  &lt;!-- for Agent : REVIEW_PRINT, ESIGN , UPLOAD 
                                       for customer : CHECKBOX --&gt;
                                  &lt;customerActivity&gt;REVIEW_PRINT&lt;/customerActivity&gt;
                                  &lt;customerRole&gt;PAYOR&lt;/customerRole&gt;
                                &lt;/inOfficeRulesForActivity&gt;
                                &lt;outOfOfficeRulesForActivity&gt;
                                  &lt;customerActivity&gt;CHECKBOX&lt;/customerActivity&gt;
                                  &lt;customerRole&gt;PAYOR&lt;/customerRole&gt;
                                &lt;/outOfOfficeRulesForActivity&gt;
                              &lt;/agentActivity&gt;
                              &lt;commonActivity&gt;
                                &lt;roleCategory&gt;ONLINE&lt;/roleCategory&gt;
                                &lt;roleForActivity&gt;
                                  &lt;customerActivity&gt;ESIGN&lt;/customerActivity&gt;
                                  &lt;customerRole&gt;PAYOR&lt;/customerRole&gt;
                                &lt;/roleForActivity&gt;
                              &lt;/commonActivity&gt;
                            &lt;/roleActivity&gt;
                          &lt;/paymentFormInfo&gt;
                          &lt;financialAccountOwnerActivity&gt;
                            &lt;canChange&gt;true&lt;/canChange&gt;
                            &lt;!-- valid String --&gt;
                            &lt;searchOptions&gt;searchOptions&lt;/searchOptions&gt;
                          &lt;/financialAccountOwnerActivity&gt;
                          &lt;canChooseAgent&gt;true&lt;/canChooseAgent&gt;
                        </b>

问题:在这里,大多数复杂元素为零或更多。我需要循环浏览所有元素。但如果我们有如上所示的参数,那就很困难了。我们不能为每个或任何其他有效的xpath求值实现,因为在参数中我们有xs:String。xsl:param(或)xsl:copy 中的每个元素(或)任何有效的xpath求值是否有循环的方法

感谢的任何帮助

谢谢Eresh

根据我的经验,最简单的方法是:

  • 将参数放入XML文档中;给它一个名字(比如param.xml
  • 从命令行调用XSLT处理器时,将参数文件的名称作为字符串参数传递
  • 在XSLT中,声明适当的参数(例如<xsl:param name="paramfile" select="'param.xml'"/>
  • 声明一个初始化为document($paramfile)的变量

如果您从其他环境调用XSLT(例如,通过Java调用),可能会有一些机制将文档节点或元素节点作为参数传递给XSLT处理器,但细节必须是特定于实现的,而且(根据SO上的问题判断)很容易出错。

我正在上传mule代码和xslt,其中我将参数作为文档发送

XSLT文件

<xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:ser="http://service.moneytransfermanagement.financials.icp.sf/">
      <soapenv:Body>
            <soapenv:Fault>
                <faultcode>
                    <xsl:copy-of select="$xmlObj/node()"/>
                <!-- 
                <xsl:copy-of select="//$xmlObj/errorCode"/>
                 -->
                </faultcode>
                <faultstring>                       
                </faultstring>                              
                <detail>
                </detail>
                </soapenv:Fault>                
        </soapenv:Body>
    </soapenv:Envelope>     
</xsl:template>

和mule代码:

    <mule-xml:xslt-transformer
        xsl-file="xsl/MoneyTransferManagement/ErrorTransformerXMLTest.xsl">
        <mule-xml:context-property key="xmlObj"
            value="#[groovy:serviceResponse.getFirstChild()]" />                        
    </mule-xml:xslt-transformer>

xml到dom的转换器将字符串转换为DOM,我们可以指定返回类第一个子项将为我们提供元素句柄,并且我们将其传递给XSL

相关内容

  • 没有找到相关文章

最新更新