XSLT новичка (так что я извиняюсь заранее)XSLT 2.0, шаблоны и узел/значение устанавливают
У меня есть файл XML, содержащий данные платежа. Я пытаюсь преобразовать его в XML-формат, используемый банком. XML должен быть другим, если это не долларовый платеж против платежа в долларах США. Множественные платежи возможны в данном файле здесь приведен пример исходного XML (упрощенный, одна операция)
<Payments>
<Payment>
<Payment_Detail>
<Payment_Info>
<ns:PAYMENT_Payment_Memo>Payment Info</ns:PAYMENT_Payment_Memo>
<ns:PAYMENT_Payment_Amount>22222</ns:PAYMENT_Payment_Amount>
<ns:PAYMENT_Currency>US Dollars</ns:PAYMENT_Currency>
<ns:PAYMENT_Currency_Code>USD</ns:PAYMENT_Currency_Code>
<ns:PAYMENT_Check_or_Advice_Number>0</ns:PAYMENT_Check_or_Advice_Number>
</Payment_Info>
<Payer_Data>
<ns:PAYER_Company_Name>Company, LLP</ns:PAYER_Company_Name>
<ns:PAYER_Address_Line_1>Main st</ns:PAYER_Address_Line_1>
<ns:PAYER_Address_Line_2>Line 2</ns:PAYER_Address_Line_2>
<ns:PAYER_City>Cleveland</ns:PAYER_City>
<ns:PAYER_Zip_Code>11111</ns:PAYER_Zip_Code>
<ns:PAYER_Country>US</ns:PAYER_Country>
<ns:PAYER_Account_Number>1111-11111111</ns:PAYER_Account_Number>
<ns:PAYER_Currency>USD</ns:PAYER_Currency>
</Payer_Data>
<Payee_Data>
<ns:PAYEE_Name>Name</ns:PAYEE_Name>
<ns:PAYEE_Bank_Name>Bank Name</ns:PAYEE_Bank_Name>
<ns:PAYEE_Bank_Account_Name>Account Name</ns:PAYEE_Bank_Account_Name>
<ns:PAYEE_Account_Number>1111111</ns:PAYEE_Account_Number>
<ns:PAYEE_Masked_Account_Number>**********</ns:PAYEE_Masked_Account_Number>
<ns:PAYEE_Account_Type>DD</ns:PAYEE_Account_Type>
<ns:PAYEE_Routing_Transit_Number>22222</ns:PAYEE_Routing_Transit_Number>
<ns:PAYEE_Bank_Country>US</wpc:PAYEE_Bank_Country>
</Payee_Data>
</Payment_Detail>
</Payment>
</Payments>
моя мысль/было использовать другой шаблон на основе валюты. Проблема Я бегу в это выяснить, какой шаблон для вызова при наличии нескольких платежей (узел устанавливается против одного узла)
вот мой XSL (также упрощена)
<xsl:variable name="paymentCurrency"
select="/Payment/Payment_Detail/Payment_Info/ns:PAYMENT_Currency_Code"/>
<xsl:choose>
<xsl:when test="$paymentCurrency = 'USD'">
<xsl:call-template name="Payment-Domestic"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="Payment-Foreign"/>
</xsl:otherwise>
</xsl:choose>
<xsl:template name="Payment-Domestic">
<xsl:for-each select="/Payments/Payment">
<paymentrec>
<recordType>2</recordType>
<!-- insert other domestic payment fields -->
</xsl:for-each>
</xsl:template>
<xsl:template name="Payment-Foreign">
<xsl:for-each select="/Payments/Payment">
<paymentrec>
<recordType>5</recordType>
<!-- insert other non US payment fields -->
</xsl:for-each>
</xsl:template>
Он работает, когда есть это единый платеж во входном файле, но несколько записей устанавливают переменную в набор узлов/значений и никогда не будут совпадать.
Каков наилучший способ для вызова различных шаблонов? Не следует ли использовать для каждого? (Обработки XSLT, как императивный язык не самая умная идея либо, я знаю)
Благодаря
EDIT, чтобы ответить на комментарий/вопрос XSLT 2.0, пример вывод (упрощенно ниже)
(Foreign платеж)
<paymentrec>
<recordType>5</recordType>
<payerAccNum>1111-11111111</payerAccNum>
<Currency/>
(other fields)
</paymentrec>
(USD платеж)
<paymentrec>
<recordType>2</recordType>
<payerAccNum>1111-11111111</payerAccNum>
<payAmount/>
(other fields)
</paymentrec>
Это также приводит меня к другому вопросу: Если у меня есть 3-4 поля для добавления в качестве внутренних платежей (но не иностранных). У меня есть шаблон внутренней оплаты, но если я его назову внутри внутреннего шаблона, он дублирует заголовок. Если я применяю его, когда я называю «платеж» шаблон он появляется в иностранной оплаты (который я не хочу)
Спасибо! и банк использует термины «иностранные» и «домашние» ... и у них есть некоторые действительно странные требования, в которые я не буду входить – Jay