知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 5350|回复: 0

[原创] 使用xslt技术把xml文件转换成文本文件!

[复制链接]
发表于 2007-8-20 21:18:42 | 显示全部楼层 |阅读模式
由于工作需要把xml文件转换成.dao的文本文件,所以自己摸索着写了这个程序.

xml格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DAO SYSTEM "daoCheck.dtd">

<DAO>
  <VERSION>2.0</VERSION>
  <PROJECT>设备管理系统</PROJECT>
  <TABLE>DB.TBMEMBB</TABLE>
  <CLASS>memcbb</CLASS>
  <PACKAGE>com.icsc.me.mem.dao</PACKAGE>
  <ENTITY>memcbb</ENTITY>
  <AUTHOR>mynameshb(***)</AUTHOR>
  <DESCRIPT>设备资料(TBMEMBB)</DESCRIPT>
  <LINE NUM="1">
    <ROW1>
      <NAME>membbid</NAME>
      <DATATYPE>String</DATATYPE>
      <ISKEY>Y</ISKEY>
      <DECRIPTION>系统索引值</DECRIPTION>
      <SIZE>32</SIZE>
      <FORMAT>String</FORMAT>
      <DEFVALUE>""</DEFVALUE>
      <LIST>N</LIST>
      <INS>N</INS>
      <UPD>N</UPD>
      <TYPE>text</TYPE>
      <PARA1></PARA1>
      <PARA2></PARA2>
      <PARA3></PARA3>
    </ROW1>
</DAO>
文本格式如下:
#Meta
------------------------------------------------------------
version        :        2.0
project        :        设备管理系统
table        :        DB.TBMEMBB
class        :        memcbb
package        :        com.icsc.me.mem.dao
entity        :        memcbb
author        :        mynameshb(***)
descript        :        设备资料(TBMEMBB)

#Field
#name        dataType        Key[y/n]        description        DBsize        format        default list[y/n] ins[y/n] upd[y/n] type
--------------------------------------------------------------------------------
membbid String Y 系统索引值 32 String "" N N N text
转换代码如下:
    在java文件中使用如下代码来进行转换动作.
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = null ;
        try
        {
             String xslFile = "这里输入xslt文件路径,包括文件名";
             String xmlFile = "这里输入xml文件路径,包括文件名";
             String daoFile = "这里输入dao文件路径,包括文件名";
             transformer = factory.newTransformer(new StreamSource(new File(xslFile)));  
             transformer.setOutputProperty(OutputKeys.METHOD,"text");   //设定转换为text
             transformer.setOutputProperty(OutputKeys.ENCODING,"gb2312");  //转换文件格式为gb2312
             transformer.setOutputProperty(OutputKeys.INDENT,"yes");  //设定格式有缩进
             transformer.transform(new StreamSource(new File(xmlFile)),new StreamResult(new File(daoFile)));
         }
         catch (TransformerConfigurationException e1)
         {
            e1.printStackTrace();
         }
         catch (TransformerException e1)
         {
            e1.printStackTrace();
         }

xlst文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?altova_samplexml C:\codeAutoGenGUI\xslt\daoCheck.xslt?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
        <xsl:output method="text" indent="no"/>
        <xsl:template match="/">#Meta
------------------------------------------------------------
version                :        <xsl:value-of select="/DAO/VERSION"/>
project                :        <xsl:value-of select="/DAO/PROJECT"/>
table                :        <xsl:value-of select="/DAO/TABLE"/>
class                :        <xsl:value-of select="/DAO/CLASS"/>
package                :        <xsl:value-of select="/DAO/PACKAGE"/>
entity                :        <xsl:value-of select="/DAO/ENTITY"/>
author                :        <xsl:value-of select="/DAO/AUTHOR"/>
descript        :        <xsl:value-of select="/DAO/DESCRIPT"/>
               
#Field
#name        dataType        Key[y/n]        description        DBsize        format        default list[y/n] ins[y/n] upd[y/n] type
--------------------------------------------------------------------------------
<xsl:for-each select="DAO/LINE/*">
                        <xsl:value-of select="NAME"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="DATATYPE"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="ISKEY"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="DECRIPTION"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="SIZE"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="FORMAT"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="DEFVALUE"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="LIST"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="INS"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="UPD"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="TYPE"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="PARA1"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="PARA2"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="PARA3"/>
                        <xsl:text>&#13;</xsl:text>
                </xsl:for-each>
        </xsl:template>
</xsl:stylesheet>
这是本人在对xml转换成.dao文件时用到的方法,如果有疑问,请回贴.
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-22 21:32

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表