0

我有一个场景,我会将一个参数传递给 XSLT,而 XSLT 又是一个 xml 元素。但它将作为转义字符发送(< 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>

问题:这里大多数复杂元素都是零或更多。我需要遍历所有元素。但是,如果我们有如上所示的参数,则很难。我们无法实现 for-each 或任何其他有效的 xpath 评估,因为在参数中我们有 xs:String 。有没有办法循环遍历 xsl:param (or)xsl:copy 中的每个元素(或)任何有效的 xpath 评估

任何帮助表示赞赏

谢谢埃雷什

4

2 回答 2

0

我正在上传 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-xml:xslt-transformer
        xsl-file="xsl/MoneyTransferManagement/ErrorTransformerXMLTest.xsl">
        <mule-xml:context-property key="xmlObj"
            value="#[groovy:serviceResponse.getFirstChild()]" />                        
    </mule-xml:xslt-transformer>

xml-to-dom-transformer  将 String 转换为 DOM,我们可以指定返回类 First child 会给我们元素句柄,同样我们传递给 XSL

于 2013-07-03T14:57:13.273 回答
0

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

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

如果您从其他环境(例如通过 Java 调用)调用 XSLT,则可能存在将文档节点或元素节点作为参数传递给 XSLT 处理器的机制,但细节必须是特定于实现的,并且(根据关于SO)往往很容易出错。

于 2013-07-02T15:42:56.763 回答