У меня есть эти требования для сортировки конкретного элемента. Но я не знаю, как я это сделаю. Я пробовал XSLT, который я видел, но я не могу получить ожидаемый результат, который я хотел. Входной XML, как это:Сортировка элементов с использованием XSLT
<SyncCredit xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" releaseID="9.2" versionID="2.12.3">
<Data>
<AccountingNo>ERP_12344</AccountingNo>
<Credit>
<Header>
<Name>Supplier Bank</Name>
<Date>02-08-2017</Date>
</Header>
<Payment>
<ID>111</ID>
<Date>02-01-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="PassportNo">1000</ID>
</PartyID>
</Creditor>
</Transaction>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="TaxIdentificationNo">5000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
<Payment>
<ID>222</ID>
<Date>02-05-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="BankPartyNo">4000</ID>
</PartyID>
</Creditor>
</Transaction>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="DriverLicense">2000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
</Credit>
</Data>
</SyncCredit>
Мой ожидаемый результат должен выглядеть следующим образом:
<SyncCredit xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" releaseID="9.2" versionID="2.12.3">
<Data>
<AccountingNo>ERP_12344</AccountingNo>
<Credit>
<Header>
<Name>Supplier Bank</Name>
<Date>02-08-2017</Date>
</Header>
<Payment>
<ID>111</ID>
<Date>02-01-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="PassportNo">1000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
<Payment>
<ID>222</ID>
<Date>02-05-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="DriverLicense">2000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
<Payment>
<ID>222</ID>
<Date>02-05-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="BankPartyNo">4000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
<Payment>
<ID>111</ID>
<Date>02-01-2017</Date>
<Transaction>
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="TaxIdentificationNo">5000</ID>
</PartyID>
</Creditor>
</Transaction>
</Payment>
</Credit>
</Data>
</SyncCredit>
Элементы/PartyID/ID Кредитор должен быть отсортирован, сохраняя при этом другие элементы нетронутыми. Тем не менее, мне нужно разделить отсортированный Creditor/PartyID/ID на каждый узел <Payment>
. Я использую XSLT v2.0. Хотя, я могу сортировать Кредитору/PartyID/ID надлежащим образом с помощью <xsl:perform-sort>
из ссылки, которую я получил, выход я получаю, как это:
<Payment>
<Transaction xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="PassportNo">1000</ID>
</PartyID>
</Creditor>
</Transaction>
<Transaction xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="DriverLicense">2000</ID>
</PartyID>
</Creditor>
</Transaction>
<Transaction xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="BankPartyNo">4000</ID>
</PartyID>
</Creditor>
</Transaction>
<Transaction xmlns="http://schema.XYZ.com/XYZOAGIS/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BookNo>AA-111</BookNo>
<Creditor>
<PartyID>
<ID schemeName="TaxIdentificationNo">5000</ID>
</PartyID>
</Creditor>
</Transaction>
Это мой XSLT, это не является полным, потому что я не знаю, как я буду копировать элементы под заголовком и из Payment.I только пытался сделать XSLT в элементе Transaction.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xpath-default-namespace="http://schema.XYZ.com/XYZOAGIS/2">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:variable name="Transaction">
<xsl:perform-sort select="SyncCredit/Data/Credit/Payment/Transaction">
<xsl:sort data-type="number" select="Creditor/PartyID/ID"/>
</xsl:perform-sort>
</xsl:variable>
<Payment>
<xsl:copy-of select="$Transaction"/>
</Payment>
</xsl:template>
Спасибо заранее.
Покажите нам XSLT, что вы пробовали. –
Вопрос не ясен. Обратите внимание, что ваш вывод имеет другую _структуру, чем вход. На входе каждый '' содержит _two_ '' s, но в ожидаемом выходе каждая транзакция была разделена на собственный платежный узел. –
@ Jim Garrison: Спасибо. Я уже редактировал свой пост и включил XSLT, который я создал. Да, ты прав. При вводе тег Payment содержит 2 тега транзакции. Мне нужно сортировать Creditor/PartyID/ID, и мне нужно разделить его на свой собственный платежный узел. –