[英]Using XSLT to take data from two XML files and merge into one?
I'm trying to merge two tables using XSLT 1.0. 我正在尝试使用XSLT 1.0合并两个表。
I have a representation of two DB tables in XML. 我用XML表示了两个数据库表。 The first table is a set of key-value pairs:
第一个表是一组键值对:
Table1.xml Table1.xml
<table>
<row>
<column name="key">key1</column>
<column name="value">val1</column>
</row>
<row>
<column name="key">key2</column>
<column name="value">val2</column>
</row>
</table>
The second table has rows of data: 第二个表具有数据行:
Table2.xml Table2.xml
<table>
<row>
<column name="A">a1</column>
<column name="B">b1</column>
<column name="C">c1</column>
</row>
<row>
<column name="A">a2</column>
<column name="B">b2</column>
<column name="C">c2</column>
</row>
</table>
I am trying to take one of the key-value pairs and add insert it as a new column in every row so that it ends up with this: 我正在尝试采用一对键值对并将其添加为每一行中的新列,以便最终得到以下结果:
Output.xml Output.xml
<table>
<row>
<column name="A">a1</column>
<column name="B">b1</column>
<column name="C">c1</column>
<column name="key1">val1</column>
</row>
<row>
<column name="A">a2</column>
<column name="B">b2</column>
<column name="C">c2</column>
<column name="key1">val1</column>
</row>
</table>
Here are the two main ingredients of the solution: 这是解决方案的两个主要成分:
<xsl:variable name="kvp">
<xsl:variable name="row" select="doc('table1.xml')/table/row[1]"/>
<column name="{$row/column[1]}">
<xsl:value-of select="$row/column[2]"/>
</column>
</xsl:variable>
<xsl:template match="row">
<row>
<xsl:copy-of select="*"/>
<xsl:copy-of select="$kvp"/>
</row>
</xsl:template>
I want to select the row where the key is "key1" and create a new column from it in the output table.
我想选择键为“ key1”的行,并在输出表中从中创建一个新列。
Assuming you are processing the Table2.xml
file, you can do: 假设您正在处理
Table2.xml
文件,则可以执行以下操作:
XSLT 1.0 XSLT 1.0
<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:strip-space elements="*"/>
<xsl:variable name="val" select="document('Table1.xml')/table/row[column[1]='key1']/column[2]" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="row">
<xsl:copy>
<xsl:apply-templates/>
<column name="key1">
<xsl:value-of select="$val" />
</column>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.