【发布时间】:2018-12-19 11:37:39
【问题描述】:
我是 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 的父级添加到 recordvalues 和 ammendvalues(CompanyBatchHeader 可以出现多次,并且 recordvalues 后的 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>
它能够在记录值和修正值之间添加数据标签,但它忽略了其他所有内容。而且我不知道如何解决这个问题。
【问题讨论】:
-
发布您的尝试,以便我们可以修复它,而不必从头开始为您编写代码。 -- 还要说明您的处理器是否支持 XSLT 2.0,因为这看起来像是一个分组问题。
-
谢谢迈克尔,我已经编辑了我的帖子并添加了我认为最接近解决方案的 xslt。