XSLT 1.0 как создать пустой результат и / или прервать преобразование, когда условие выполнено - PullRequest
0 голосов
/ 16 января 2019

как я могу прервать преобразование xslt, если HeaderInformation / InvoiceType = CreditNote?

XML:

<?xml version="1.0" encoding="utf-8"?>
<SALESINVOICE>
    <Interchange>
		<Recipient>1234</Recipient>
		<Sender>5678</Sender>
		<CreationDate>2019-01-11:09:16:43</CreationDate>
		<Test>No</Test>
		<Interchange_Control_Number>123584</Interchange_Control_Number>
		<HeaderInformation>
			<OrigInvoiceNumber>1</OrigInvoiceNumber>
			<InvoiceType>CreditNote</InvoiceType>
		</HeaderInformation>
	</Interchange>
</SALESINVOICE>

С наилучшими пожеланиями Julian

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вот один из способов (из многих):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <xsl:apply-templates select="SALESINVOICE[not(Interchange/HeaderInformation/InvoiceType='CreditNote')]"/>
</xsl:template>

<xsl:template match="SALESINVOICE">
    <!-- instructions to process the invoice -->
</xsl:template>

</xsl:stylesheet>
0 голосов
/ 16 января 2019

В зависимости от того, что вы подразумеваете под «прервать»:

Вы можете использовать <xsl:message> примерно так:

<xsl:if test="HeaderInformation/InvoiceType='CreditNote'">
    <xsl:message terminate="yes"/>
</xsl:if>

Это завершится с ошибкой.

Если вы просто не хотите ошибки, вы также можете сделать что-то вроде этого:

<xsl:template match="/">
    <xsl:if test="SALESINVOICE[not(Interchange/HeaderInformation/InvoiceType='CreditNote')]">
        <!-- Here goes your XSLT code -->
        <xsl:apply-templates/>
    </xsl:if>
</xsl:template>

Будет выведен пустой документ, если найден <InvoiceType> со значением CreditNote.

...