我有一個場景,我將在這裏傳遞一個參數給XSLT,而後者又是一個xml元素。但它會作爲逃生模板發送(<爲< ....)將xsl參數轉換爲xml節點,以便通過各種節點lopp
我的要求是我有各種各樣的孩子節點,我必須通過它們循環並需要變換。請找到請求,參數。
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 ">
<statusCode>0</statusCode>
<errorMessage>errorMessage</errorMessage>
<paymentMethodTypes>
<!-- NULL or any type code 01, 04 , 10 (sample not real) -->
<methodTypeCode>01</methodTypeCode>
<!-- Possible values methodTypeDisplayName
CREDIT_CARD,BANK_ACCOUNT,CASH,CHECK,CASH_EQUIVALENT
-->
<methodTypeDisplayName>CREDIT_CARD</methodTypeDisplayName>
<!-- valid dollar amount -->
<maximumAmountPaid>100.00</maximumAmountPaid>
</paymentMethodTypes>
<paymentFormInfo>
<!-- NULL or any type code 01, 04 , 10 (sample not real) -->
<paymentMethodTypeCode>01</paymentMethodTypeCode>
<!-- sample form id 1004854 , 1004874 , 1004889 , 1004875-->
<formId>1004885</formId>
<!-- Not exactly sure just an assumption -->
<formLanguageRefId>US</formLanguageRefId>
<!-- forn name : EFT_AUTHORIZATION -->
<formName>EFT_AUTHORIZATION</formName>
<roleActivity>
<agentActivity>
<inOfficeRulesForActivity>
<!-- for Agent : REVIEW_PRINT, ESIGN , UPLOAD
for customer : CHECKBOX -->
<customerActivity>REVIEW_PRINT</customerActivity>
<customerRole>PAYOR</customerRole>
</inOfficeRulesForActivity>
<outOfOfficeRulesForActivity>
<customerActivity>CHECKBOX</customerActivity>
<customerRole>PAYOR</customerRole>
</outOfOfficeRulesForActivity>
</agentActivity>
<commonActivity>
<roleCategory>ONLINE</roleCategory>
<roleForActivity>
<customerActivity>ESIGN</customerActivity>
<customerRole>PAYOR</customerRole>
</roleForActivity>
</commonActivity>
</roleActivity>
</paymentFormInfo>
<financialAccountOwnerActivity>
<canChange>true</canChange>
<!-- valid String -->
<searchOptions>searchOptions</searchOptions>
</financialAccountOwnerActivity>
<canChooseAgent>true</canChooseAgent>
</b>
問題: 這裏大多數複合元件是零個或多個。我需要遍歷所有元素。但是如果我們有如上所示的參數,則很難。我們不能實現for-each或任何其他有效的xpath評估,因爲在參數中我們有xs:String。有沒有辦法通過每個元素(或)XSL中循環的任何有效的XPath評價:參數(或)XSL:複製
任何幫助表示讚賞
感謝 Eresh
感謝您的回覆,但我們無法將外部文件解析用作xslt中的文檔並使用。我們使用mule esb,我們所有來自騾子的有效載荷將被髮送到xslt進行轉換。如果我們將任何參數從mule發送到xslt,即使它是一個xml元素,所有小於和大於符號的wuth都會被替換爲wuth轉義字符,但我們正是儘可能將cdata傳遞給xslt,即使我們將xml傳遞給它。 – Eresh
我們也試過在mule esb中使用java評估來傳遞參數,但沒有幫助。我們得到了#[document:null]。 – Eresh
聽起來好像您有兩個XML流交給XSLT處理器。如果你不能讓它們中的任何一個都可以從一個URI中獲取(n.b. *,*不一定與'從一個文件中'相同),另一種方法是將它們都包裝到一個包裝文檔中並相應地調整XSLT。在XSLT 2.0中編寫XML解析器(或使用擴展函數將字符串解析爲XML)將是最後的手段。祝你好運。 –