利用XSLT将两个XML文件合成一个XML文件

这个是论坛里的问题,但这个功能经常遇到,贴出来供以后参考,这里的关键是XPATH的使用。

file1.xml

view plaincopy to clipboardprint?
〈?xml version="1.0" encoding="utf-8" ?>     

〈?xml-stylesheet type="text/xsl" href="xslt1.xsl"?>     

 〈staffs> 

       〈staff order = "1"> 

         〈name>wang 〈/name>     

     〈age>27 〈/age>  

      〈/staff>    


    〈staff order = "2">    

      〈name>Li 〈/name>    

      〈age>24 〈/age>  

      〈/staff>   

     〈staff order = "3">     

     〈name>Q1 〈/name>  

        〈age>29 〈/age>   

     〈/staff>  

    〈/staffs> 


  〈?xml version="1.0" encoding="utf-8" ?>

〈?xml-stylesheet type="text/xsl" href="xslt1.xsl"?>

〈staffs>

  〈staff order = "1">

    〈name>wang 〈/name>

    〈age>27 〈/age>

  〈/staff>

  〈staff order = "2">

    〈name>Li 〈/name>

    〈age>24 〈/age>

  〈/staff>

  〈staff order = "3">

    〈name>Q1 〈/name>

    〈age>29 〈/age>

  〈/staff>

〈/staffs>


view plaincopy to clipboardprint?
file2.xml   file2.xmlview plaincopy to clipboardprint?
〈PRE class=xml name="code">


〈?xml version="1.0" encoding="utf-8" ?>    

  〈staffs> 

       〈staff order = "1">     

     〈name>wang 〈/name>   

       〈Money>100 〈/Money>   

     〈/staff>    

    〈staff order = "2">  

        〈name>Li 〈/name>  

        〈Money>200 〈/Money>   

     〈/staff>    

    〈staff order = "3">   

       〈name>Q1 〈/name> 

         〈Money>400 〈/Money> 

       〈/staff>    

  〈/staffs> 

  〈/PRE> 


  〈PRE class=xml name="code">xslt1.xsl〈/PRE>   

〈PRE class=xml name="code">

〈PRE class=xml name="code">

〈?xml version="1.0" encoding="utf-8" ?>  

    〈xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    

  〈xsl:output  method="xml" omit-xml-declaration="yes"/>   

   〈xsl:variable name="file2" select="document('file2.xml')"/>   

   〈xsl:template match="/">    

      〈staffs>       

       〈xsl:for-each select="/staffs/staff">    

          〈xsl:variable name="CurrentOrder">

〈xsl:value-of select = "attribute::order" />

〈/xsl:variable>  

                〈staff>        

              〈xsl:attribute name="order">

〈xsl:value-of select="@order" />

〈/xsl:attribute>   

                   〈xsl:copy-of select="name" />     

                 〈xsl:copy-of select="age" />     

                 〈xsl:copy-of select="$file2/staffs/staff[@order=$CurrentOrder]/Money" />                  〈/staff>             

 〈/xsl:for-each>    

      〈/staffs>  

    〈/xsl:template> 

     〈/xsl:stylesheet>    

  〈/PRE>

      〈/PRE>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值