我有两个xml文件,需要使用XSLT合并为一个。我试图找到解决方案,但没有成功
file1 =======> xpto.xml
<Rows>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
</Row>
</Rows>
file2 =======&gt; links.xml
<Rows>
<Row><link>site1</link></Row>
<Row><link>site2</link></Row>
<Row><link>site3</link></Row>
<Row><link>site4</link></Row>
</Rows>
所需的合并输出:result.xml
<?xml version="1.0" encoding="utf-8"?>
<Rows
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
<link>site1</link>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
<link>site2</link>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
<link>site3</link>
</Row>
<Row>
<Model>INTEGRA 256 Plus</Model>
<Descri>EN-50131 GRADE 3</Descri>
<Update>updated: 2014-06-23</Update>
<Filesize>1.47 MB</Filesize>
<link>site4</link>
</Row>
</Rows>
=======&GT; merge.xsl(解决我得到的,但不是我想要的)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="fileName" select="'links.xml'" />
<xsl:param name="updates" select="document($fileName)" />
<xsl:variable name="updateLinks" select="$updates/Rows/Row" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Row">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="$updateLinks/*"></xsl:copy-of>
</xsl:copy>
</xsl:template>
答案 0 :(得分:0)
将<xsl:copy-of select="$updateLinks/*">
修改为
<xsl:copy-of select="$updates//Row[position() = $rowposition]/link">
并在<xsl:template match="Row">
添加
<xsl:variable name="rowposition" select="count(preceding-sibling::*)+1"/>