我有一个场景,我将在这里传递一个参数给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)将是最后的手段。祝你好运。 –