У меня есть входной XML с заголовками, за которыми следуют 3 детали.Затем за вторым заголовком следует 1 деталь.
Здесь ожидаемый результат - 2 отдельных заголовка.Первый заголовок с именем партии [001] имеет 3 ДЕТАЛЯ.Второй заголовок с именем партии [002] имеет 1 ДЕТАЛИ.Отображения в DETAIL должны продолжаться для каждой партии до тех пор, пока индикатор конца не будет = 9.
После сопоставления детали с помощью endindicator = 9 следующее отображение заголовка начнется с другого набора данных DETAIL.
Любые мысличтобы достичь этого с помощью XSL 1.0?
, введите XML, как показано ниже
<DETAILHEADER>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>0011</BatchItemNumber>
</DETAILHEADER>
<DETAILITEM>
<SequenceNumber>01</SequenceNumber>
<EndIndicator>7</EndIndicator>
<DETAILITEM>
<SequenceNumber>02</SequenceNumber>
<EndIndicator>7</EndIndicator>
</DETAILITEM>
<DETAILITEM>
<SequenceNumber>03</SequenceNumber>
<EndIndicator>9</EndIndicator>
</DETAILITEM>
<DETAILHEADER>
<BatchNumber>002</BatchNumber>
<BatchItemNumber>0022</BatchItemNumber>
</DETAILHEADER>
<DETAILITEM>
<SequenceNumber>01</SequenceNumber>
<EndIndicator>9</EndIndicator>
</DETAILITEM>
Ожидаемый результат
<tns:HEADER>
<BatchNumber>001</BatchNumber>
<tns:DETAIL>
<SequenceNumber>01</SequenceNumber>
<tns:DETAIL>
<SequenceNumber>02</SequenceNumber>
</tns:DETAIL>
<tns:DETAIL>
<SequenceNumber>03</SequenceNumber>
</tns:DETAIL>
</tns:HEADER>
<tns:HEADER>
<BatchNumber>002</BatchNumber>
<tns:DETAIL>
<SequenceNumber>01</SequenceNumber>
</tns:DETAIL>
</tns:HEADER>
Я думаю, что проблема здесь все еще не решена - что-то ещенеправильно Позвольте мне быть более ясным с моими данными Исходный ввод:
<xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="body">
<CA xmlns="http://TargetNamespace.com/IR_CA">
<RECORD1>
<Destination />
<Origin />
<YYMMDDHHMM>1901292353</YYMMDDHHMM>
<C6 />
</RECORD1>
<DETAILHEADER>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>000</BatchItemNumber>
<Destination>175964</Destination>
<Origin>156</Origin>
</DETAILHEADER>
<RECORD6>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<CheckNumber>2332LAO54</CheckNumber>
<C8>175964</C8>
</RECORD6>
<DETAILITEM>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<Type>4</Type>
<Sequence>01</Sequence>
<EndIndicator>7</EndIndicator>
<InvoiceNumber>75040665733</InvoiceNumber>
</DETAILITEM>
<DETAILITEM>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<Type>4</Type>
<Sequence>02</Sequence>
<EndIndicator>7</EndIndicator>
<InvoiceNumber>75040665734</InvoiceNumber>
</DETAILITEM>
<DETAILITEM>
<BatchNumber>001</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<Type>4</Type>
<Sequence>03</Sequence>
<EndIndicator>9</EndIndicator>
<InvoiceNumber>75040665735</InvoiceNumber>
</DETAILITEM>
<RECORD7>
<BatchNumber>1</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<DepositDate>181128</DepositDate>
<RemittanceDollarTotal>0016188528</RemittanceDollarTotal>
<C8 />
</RECORD7>
<DETAILHEADER>
<BatchNumber>002</BatchNumber>
<BatchItemNumber>000</BatchItemNumber>
<Destination />
<Origin>156</Origin>
</DETAILHEADER>
<RECORD6>
<BatchNumber>002</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<CheckNumber>2331LAZ30</CheckNumber>
<C8>220650</C8>
</RECORD6>
<DETAILITEM>
<BatchNumber>002</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<Type>4</Type>
<Sequence>01</Sequence>
<EndIndicator>9</EndIndicator>
<InvoiceNumber>75040665731</InvoiceNumber>
</DETAILITEM>
<RECORD7>
<BatchNumber>2</BatchNumber>
<BatchItemNumber>001</BatchItemNumber>
<DepositDate>181128</DepositDate>
<RemittanceDollarTotal>0016188528</RemittanceDollarTotal>
<C8 />
</RECORD7>
<RECORD9>
<NumberofRecords>2</NumberofRecords>
<C3 />
</RECORD9>
</CA>
</part>
А вот ожидаемый результат - пространство имен tns можно игнорировать
<?xml version="1.0" encoding="UTF-8"?>
<part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="body">
<HEADERLP xmlns="http://TargetNamespace.com/HEADER">
<tns:HEADER>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>000</tns:ItemNumber>
<tns:CheckNumber>2332LAO54</tns:CheckNumber>
<tns:CustomerNumber>175964</tns:CustomerNumber>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665733 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>02</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>03</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
</tns:HEADER>
<tns:HEADER>
<tns:BatchName>002</tns:BatchName>
<tns:ItemNumber>000</tns:ItemNumber>
<tns:CheckNumber> </tns:CheckNumber>
<tns:CustomerNumber>156</tns:CustomerNumber>
<tns:Detail>
<tns:BatchName>002</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665731 </tns:InvoiceNumber>
</tns:Detail>
</tns:HEADER>
</:HEADERLP>
</part>
Но неправильный вывод, полученный сегодня
<?xml version="1.0" encoding="UTF-8"?>
<part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="body">
<HEADERLP xmlns="http://TargetNamespace.com/HEADER">
<tns:HEADER>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>000</tns:ItemNumber>
<tns:CheckNumber>2332LAO54</tns:CheckNumber>
<tns:CustomerNumber>175964</tns:CustomerNumber>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665733 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>02</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>03</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>002</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665731 </tns:InvoiceNumber>
</tns:Detail>
</tns:HEADER>
<tns:HEADER>
<tns:BatchName>002</tns:BatchName>
<tns:ItemNumber>000</tns:ItemNumber>
<tns:CheckNumber> </tns:CheckNumber>
<tns:CustomerNumber>156</tns:CustomerNumber>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665733 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>02</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>001</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>03</tns:SequenceNumber>
<tns:InvoiceNumber>75040665734 </tns:InvoiceNumber>
</tns:Detail>
<tns:Detail>
<tns:BatchName>002</tns:BatchName>
<tns:ItemNumber>001</tns:ItemNumber>
<tns:SequenceNumber>01</tns:SequenceNumber>
<tns:InvoiceNumber>75040665731 </tns:InvoiceNumber>
</tns:Detail>
</tns:HEADER>
</:HEADERLP>
</part>
Здесь детали повторяются неправильно для каждого заголовка
текущий код, как показано ниже
<xsl:template match="/">
<tns:HEADERLP>
<xsl:for-each select="/ns0:CA/ns0:DETAILHEADER">
<tns:HEADER>
<tns:BatchName>
<xsl:value-of select="ns0:BatchNumber"/>
</tns:BatchName>
<tns:ItemNumber>
<xsl:value-of select="ns0:BatchItemNumber"/>
</tns:ItemNumber>
<tns:CustomerNumber>
<xsl:value-of select="ns0:Destination"/>
</tns:CustomerNumber>
<tns:CheckNumber>
<xsl:value-of select="/ns0:CA/ns0:RECORD6/ns0:CheckNumber"/>
</tns:CheckNumber>
<xsl:for-each select="/ns0:CA/ns0:DETAILITEM">
<tns:Detail>
<tns:BatchName>
<xsl:value-of select="ns0:BatchNumber"/>
</tns:BatchName>
<tns:ItemNumber>
<xsl:value-of select="ns0:BatchItemNumber"/>
</tns:ItemNumber>
<tns:SequenceNumber>
<xsl:value-of select="ns0:SequenceNumber"/>
</tns:SequenceNumber>
</tns:Detail>
</xsl:for-each>
</tns:HEADER>
</xsl:for-each>
</tns:HEADERLP>
</xsl:template>
</xsl:stylesheet>
В основном детали должны отображаться только для соответствующего номера партии и сопоставлениядолжен остановиться после того, как endindicator = 9 достигнет в DETAILITEM.
Как этого добиться с помощью XSL версии 1.0?