0

私は、xml 要素である XSLT にパラメーターを渡すというシナリオがあります。ただし、エスケープ文字 (< for < ....) として送信されます。

私の要件は、さまざまな子ノードがあり、それらをループして変換する必要があることです。request 、パラメータを見つけてください。

リクエスト.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>

質問: ここで、複雑な要素のほとんどは 0 以上です。すべての要素をループする必要があります。しかし、上記のようにパラメーターがある場合、それは困難です。パラメーターに xs:String があるため、for-each またはその他の有効な xpath 評価を実装できません。各要素 (または) xsl:param (または)xsl:copy 間の有効な xpath 評価をループする方法はありますか

どんな助けでも大歓迎

ありがとうエレッシュ

4

2 に答える 2

0

ミュール コードをアップロードしています。また、パラメーターをドキュメントとして送信している 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 に変換し、戻りクラスを指定できます 最初の子は要素ハンドルを提供し、同じように XSL に渡します

于 2013-07-03T14:57:13.273 に答える
0

私の経験では、最も簡単な方法は次のとおりです。

  • パラメータを XML ドキュメントに入れます。名前を付けます (たとえば、param.xml)。
  • コマンド ラインから XSLT プロセッサを呼び出す場合は、パラメーター ファイルの名前を文字列パラメーターとして渡します。
  • XSLT で、適切なパラメーターを宣言します (例: <xsl:param name="paramfile" select="'param.xml'"/>)。
  • に初期化される変数を宣言しますdocument($paramfile)

他の環境から XSLT を呼び出す場合 (Java 呼び出しなど)、ドキュメント ノードまたは要素ノードをパラメーターとして XSLT プロセッサに渡すメカニズムがあるかもしれませんが、詳細は必然的に実装固有であり、( SO) 間違えやすい傾向にあります。

于 2013-07-02T15:42:56.763 に答える