我需要合并使用XSLT两个XML文件。 他们是这样的:
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
... Some stuff
</s:Schema>
<rs:data>
<z:row Initialer='HBL' personaleGrupper='FF' Fornavn='Harald' Efternavn='Blåtand' personnummer='123459'/>
</rs:data>
</xml>
并与看起来像另一个文件:
<rs:data>
<z:row Initialer='KT' personaleGrupper='FF' Fornavn='Kristian' Efternavn='Tyrann' personnummer='546578'/>
</rs:data>
我的尝试是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:template match="rs:data">
<xsl:copy>
<xsl:apply-templates select="@* | node() | document('doc2.xml')/rs:data/z:row/node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
不过,我几乎得到源文件(doc1.xml)的副本。 换句话说,该模式部分是存在的,并且所述一个RS:哈拉尔德Blåtand的数据行是存在的。 但不是克里斯蒂安Tyrann线。
我究竟做错了什么?
我不能完全确定你的输出应该是什么样子。
从doc2.xml数据条目的后面RS:从第1文本数据条目下面的XSLT将复制RS。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:template match="xml">
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
<xsl:apply-templates select="rs:data" mode="copy" />
<xsl:apply-templates select="document('doc2.xml')//rs:data" mode="copy" />
</xsl:copy>
</xsl:template>
<xsl:template match="rs:data" />
<xsl:template match="*" mode ="copy">
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
</xsl:copy>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
并生成以下的输出:
?xml version="1.0"?>
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
... Some stuff
</s:Schema>
<rs:data>
<z:row Initialer="HBL" personaleGrupper="FF" Fornavn="Harald" Efternavn="Blåtand" personnummer="123459"/>
</rs:data>
<rs:data>
<z:row Initialer="KT" personaleGrupper="FF" Fornavn="Kristian" Efternavn="Tyrann" personnummer="546578"/>
</rs:data>
</xml>
更新:似乎应该只有一个RS:在输出数据,并且仅合并Z:行。 尝试这个:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:template match="xml">
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
</xsl:copy>
</xsl:template>
<xsl:template match="rs:data" >
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
<xsl:apply-templates select="document('doc2.xml')//rs:data/*" />
</xsl:copy>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node() " />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
产生:
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
... Some stuff
</s:Schema>
<rs:data>
<z:row Initialer="HBL" personaleGrupper="FF" Fornavn="Harald" Efternavn="Blåtand" personnummer="123459"/>
<z:row Initialer="KT" personaleGrupper="FF" Fornavn="Kristian" Efternavn="Tyrann" personnummer="546578"/>
</rs:data>
</xml>