利用XSL双向转换XML文档

出处:http://www.cnblogs.com/erqie/articles/1144143.html

在实际应用中,经常要用到XML文件来存储相关的信息.而XML文件可以有三种结构:

1:层次结构

< DBTableName >
   < TableInfo >
     < Name >SZYLTJ </ Name >
     < Type >GB </ Type >
     < Info >水资源量基本情况统计表(多年平均) </ Info >
   </ TableInfo >
   < TableInfo >
     < Name >SZYKFLY </ Name >
     < Type >GB </ Type >
     < Info >水资源开发利用情况 </ Info >
   </ TableInfo >
   < TableInfo >
     < Name >JSL_XZ </ Name >
     < Type >GB </ Type >
     < Info >行政分区降水量 </ Info >
   </ TableInfo >
</ DBTableName >
即,所有的信息都在元素的形式存储.

2.属性结构
< DBTableName >
   < table  type ="gb"  name ="HSL_XZ"  ch ="行政分区耗水量"   />
   < table  type ="gb"  name ="HSL_LY"  ch ="流域分区耗水量"   />
   < table  type ="gb"  name ="HLSZ"  ch ="河流水质"   />
   < table  type ="gb"  name ="HBSZ"  ch ="湖泊水质"   />
   < table  type ="gb"  name ="SKSZ"  ch ="水库水质"   />
   < table  type ="gb"  name ="HLWRJC"  ch ="河断面水质监测"   />
   < table  type ="gb"  name ="PYDXWR"  ch ="平原区地下水水质污染(浅层)"   />
   < table  type ="gb"  name ="SSJSTSZ"  ch ="市界水体水质"   />
   < table  type ="gb"  name ="PYDXSZ"  ch ="平原区浅层地下水水质"   />
   < table  type ="gb"  name ="ZYSS"  ch ="重要水事"   />
</ DBTableName >
所有的信息都以属性的形式存储

3.混合结构:以上两种结构的混合.如
< DBTableName >
   < table  type ="gb" >
     < name >aa </ name >
     < info >哈哈 </ info >
   </ table >
   < table  type ="gb" >
     < name >bb </ name >
     < info >呵呵 </ info >
</ table >
</ DBTableName >
在asp.net中利用xmldatasource控件进行数据绑定的时候,基绑定的XML数据是有要求的.如在绑定到dropdownlist,gridview等控件的时候,需要XML文档为信息存储在属性里.即上述第二种结构.但如果要数据绑定到treeview控件里,则只能显示没有层次结构性的信息.如果用上述第一第元素结构的XML文件,可以显示详细的层次结构.

要进行这两种结构的软件,只需要包含几句XSL语句的转换文件.

1.转换元素结构文件为属性结构文件:
<? xml version="1.0" ?>
< xsl:stylesheet  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"  version ="1.0" >
   < xsl:template  match ="/" >
     < DBTableName >
     < xsl:for-each  select ="DBTableName/TableInfo" >
       < table >
         < xsl:attribute  name ="name" >
           < xsl:value-of  select ="Name" />
         </ xsl:attribute >
         < xsl:attribute  name ="type" >
           < xsl:value-of  select ="Type" />
         </ xsl:attribute >
         < xsl:attribute  name ="info" >
           < xsl:value-of  select ="Info" />
         </ xsl:attribute >
       </ table >
     </ xsl:for-each >
     </ DBTableName >
   </ xsl:template >
   </ xsl:stylesheet >
则第一个示例的输出结果为:
<? xml version="1.0" encoding="utf-8" ?>
< DBTableName >
   < table  name ="SZYLTJ"  type ="GB"  info ="水资源量基本情况统计表(多年平均)"   />
   < table  name ="SZYKFLY"  type ="GB"  info ="水资源开发利用情况"   />
   < table  name ="JSL_XZ"  type ="GB"  info ="行政分区降水量"   />
</ DBTableName >
2.转换属性信息为元素结构
<? xml version="1.0" ?>
< xsl:stylesheet  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"  version ="1.0" >
   < xsl:template  match ="/" >
     < DBTableName >
       < xsl:for-each  select ="DBTableName/table" >
         < table >
           < xsl:element  name ="name" >
             < xsl:value-of  select ="@name" />
           </ xsl:element >
           < xsl:element  name ="type" >
             < xsl:value-of  select ="@type" />
           </ xsl:element >
           < xsl:element  name ="ch" >
             < xsl:value-of  select ="@ch" />
           </ xsl:element >
         </ table >
       </ xsl:for-each >
     </ DBTableName >
   </ xsl:template >
</ xsl:stylesheet >
输出结果为:
<? xml version="1.0" encoding="utf-8" ?>
< DBTableName >
   < table >
     < name >HSL_XZ </ name >
     < type >gb </ type >
     < ch >行政分区耗水量 </ ch >
   </ table >
   < table >
     < name >HSL_LY </ name >
     < type >gb </ type >
     < ch >流域分区耗水量 </ ch >
   </ table >
   < table >
     < name >HLSZ </ name >
     < type >gb </ type >
     < ch >河流水质 </ ch >
   </ table >
   < table >
     < name >HBSZ </ name >
     < type >gb </ type >
     < ch >湖泊水质 </ ch >
   </ table >
   < table >
     < name >SKSZ </ name >
     < type >gb </ type >
     < ch >水库水质 </ ch >
   </ table >
   < table >
     < name >HLWRJC </ name >
     < type >gb </ type >
     < ch >河断面水质监测 </ ch >
   </ table >
   < table >
     < name >PYDXWR </ name >
     < type >gb </ type >
     < ch >平原区地下水水质污染(浅层) </ ch >
   </ table >
   < table >
     < name >SSJSTSZ </ name >
     < type >gb </ type >
     < ch >市界水体水质 </ ch >
   </ table >
   < table >
     < name >PYDXSZ </ name >
     < type >gb </ type >
     < ch >平原区浅层地下水水质 </ ch >
   </ table >
   < table >
     < name >ZYSS </ name >
     < type >gb </ type >
     < ch >重要水事 </ ch >
   </ table >
</ DBTableName >
当然,也可以根据需要转换为混合结构.用到的XSL语句就两种:

如果要生成元素,则用<xsl:element name="">如果生成属性,则为<xsl:attribute name="">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值