xml使用xsl合并两个文件?
发布时间:2020-12-16 07:57:38 所属栏目:百科 来源:网络整理
导读:我需要合并两个相似的xml文件,但只包含与常用标记匹配的记录,例如 type在以下示例中: file1.xml是 node typea/type namejoe/name/nodenode typeb/type namesam/name/node file2.xml是 node typea/type namejill/name/node 所以我有一个输出 node typea/type
我需要合并两个相似的xml文件,但只包含与常用标记匹配的记录,例如< type>在以下示例中:
file1.xml是 <node> <type>a</type> <name>joe</name> </node> <node> <type>b</type> <name>sam</name> </node> file2.xml是 <node> <type>a</type> <name>jill</name> </node> 所以我有一个输出 <node> <type>a</type> <name>jill</name> <name>joe</name> </node> <node> <type>b</type> <name>sam</name> </node> 在xsl中执行此操作的基础是什么?
这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="kElementByType" match="*[not(self::type)]" use="../type"/> <xsl:param name="pSource2" select="'file2.xml'"/> <xsl:variable name="vSource2" select="document($pSource2,/)"/> <xsl:template match="node()|@*" name="identity"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="type"> <xsl:variable name="vCurrent" select="."/> <xsl:call-template name="identity"/> <xsl:for-each select="$vSource2"> <xsl:apply-templates select="key('kElementByType',$vCurrent)"/> </xsl:for-each> </xsl:template> </xsl:stylesheet> 使用此输入(格式良好): <root> <node> <type>a</type> <name>joe</name> </node> <node> <type>b</type> <name>sam</name> </node> </root> 输出: <root> <node> <type>a</type> <name>jill</name> <name>joe</name> </node> <node> <type>b</type> <name>sam</name> </node> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |