У меня есть входной XML, который я должен реструктурировать в другой XML с помощью XSLT.Входящий XML выглядит следующим образом:
<Header>
<Rejection>
<Code>Code1</Code>
<Text>Text1</Text>
</Rejection>
<Rejection>
<Code>Code2</Code>
<Text>Text2</Text>
</Rejection>
<Rejection>
<Code>Code3</Code>
<Text>Text3</Text>
</Rejection>
</Header>
Всякий раз, когда отклонение имеет значение кода Code3, тег Code3 / Text3 должен быть первым тегом.Позиция Code3 может быть где угодно во входящем XML, но это должен быть первый тег отклонения в выходных данных.Это мой текущий XSLT
<xsl:for-each select="/Header/Rejection">
<xsl:if test ="Code='Code3'">
<REJECTION>
<REJECTCODE><xsl:value-of select="Code"></xsl:value-of></REJECTCODE>
<REJECTREASON><xsl:value-of select="Text"></xsl:value-of></REJECTREASON>
</REJECTION>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="/Header/Rejection">
<xsl:if test ="not(Code='Code3')">
<REJECTION>
<REJECTCODE><xsl:value-of select="Code"></xsl:value-of></REJECTCODE>
<REJECTREASON><xsl:value-of select="Text"></xsl:value-of></REJECTREASON>
</REJECTION>
</xsl:if>
</xsl:for-each>
Теперь есть способ предотвратить 2 цикла и получить результат в одном цикле.Выходной XML должен выглядеть следующим образом:
<Header>
<REJECTION>
<REJECTCODE>Code3</REJECTCODE>
<REJECTREASON>Text3</REJECTREASON>
</REJECTION>
<REJECTION>
<REJECTCODE>Code1</REJECTCODE>
<REJECTREASON>Text1</REJECTREASON>
</REJECTION>
<REJECTION>
<REJECTCODE>Code2</REJECTCODE>
<REJECTREASON>Text2</REJECTREASON>
</REJECTION>
</Header>
Примечание: Коды являются просто образцом. На самом деле это буквенно-цифровой код и не в порядке сортировки.