Я новичок в XSLT, у меня есть XML, который выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<FileHeaderRecord>
<FormatCode>1</FormatCode>
<ImmediateDestinationName>MEPS</ImmediateDestinationName
<CompanyBatchHeader>
<OriginatorStatusCode>1</OriginatorStatusCode>
<OriginatingFIIdentification>10000214</OriginatingFIIdentification>
<BatchNumber>0000004</BatchNumber>
<recordvalues>22100002225201198876900</recordvalues>
<ammendvalues>23</ammendvalues>
<ammendvalues>23439358</ammendvalues>
<recordvalues>1100002143439359</recordvalues>
<ammendvalues>0013439359</ammendvalues>
<ammendvalues>9359</ammendvalues>
</CompanyBatchHeader>
<CompanyBatchTrailer>
<Sderviceclasscode>220000003</Sderviceclasscode>
</CompanyBatchTrailer>
</FileHeaderRecord>
Я хочу добавить родителя с именем data в значения записей и значений ammend (также CompanyBatchHeader может появляться более одного раза, а также числоammendvalues после того, как значения записи не исправлены) создание выходного файла как:
<?xml version="1.0" encoding="UTF-8"?>
<FileHeaderRecord>
<FormatCode>1</FormatCode>
<ImmediateDestinationName>MEPS</ImmediateDestinationName
<CompanyBatchHeader>
<OriginatorStatusCode>1</OriginatorStatusCode>
<OriginatingFIIdentification>10000214</OriginatingFIIdentification>
<BatchNumber>0000004</BatchNumber>
<data>
<recordvalues>22100002225201198876900</recordvalues>
<ammendvalues>23</ammendvalues>
<ammendvalues>23439358</ammendvalues>
</data>
<data>
<recordvalues>1100002143439359</recordvalues>
<ammendvalues>0013439359</ammendvalues>
</data>
</CompanyBatchHeader>
<CompanyBatchTrailer>
<Sderviceclasscode>220000003</Sderviceclasscode>
</CompanyBatchTrailer>
</FileHeaderRecord>
Я пробовал несколько xslt, ни один из них не работал так, как я хотел.Пожалуйста, может кто-нибудь помочь мне в этом?
Я попробовал следующее xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<FileHeaderRecord>
<xsl:for-each select="FileHeaderRecord/CompanyBatchHeader/recordvalues">
<xsl:variable name="ammend_count" select="count(preceding-sibling::recordvalues) + 1"/>
<data>
<xsl:copy-of select="."/>
<xsl:copy-of select="following-sibling::ammendvalues[count(preceding-sibling::recordvalues) = $ammend_count]"/>
</data>
</xsl:for-each>
</FileHeaderRecord>
</xsl:template>
</xsl:stylesheet>
Он может добавить тег данных в значения записей и значения ammend, но он пропускает все остальное.И я не знаю, как решить эту проблему.