新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 通过页面交互来组织XSLT转换XML文件的输出 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8168 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 通过页面交互来组织XSLT转换XML文件的输出 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     x5duan 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:93
      门派:XML.ORG.CN
      注册:2005/6/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给x5duan发送一个短消息 把x5duan加入好友 查看x5duan的个人资料 搜索x5duan在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看x5duan的博客楼主
    发贴心情 通过页面交互来组织XSLT转换XML文件的输出

    最近开始学习XSLT,小有收获。可始光学习不成啊,总想拿来做点什么,就随便找了个例子来练手。
    这个例子的主要目的就是通过交互界面,让用户输入数据,然后把输入数据传到XSLT来控制XML的显示输出。
    功能很简单,闲话少说,直接看例子。

    先生成XML源文件(rule.xml):
    <?xml version="1.0" encoding="GB2312"?>
    <rules>
        <rule>
      <event>
       <id>20406</id>
       <name>TFTP下载文件</name>
      </event>
      <action>drop</action>
        </rule>
        <rule>
      <event>
       <id>20407</id>
       <name>TFTP上传文件</name>
      </event>
      <action>block</action>
        </rule>
        <rule>
      <event>
       <id>21501</id>
       <name>Telnet登录成功</name>
      </event>
      <action>log</action>
        </rule>
        <rule>
      <event>
       <id>21502</id>
       <name>Telnet登录失败</name>
      </event>
      <action>log</action>
        </rule>
    </rules>
    存成rule.xml文件。

    然后就是XSL文件了(rule.xsl):
    <?xml version="1.0" encoding="GB2312"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method= "html"/>
    <xsl:param name="ename">undefined</xsl:param>

    <xsl:template match="/">
     <html>
     <body>
     <xsl:apply-templates select="rules"/>
     </body>
     </html>
    </xsl:template>

    <xsl:template match="rules">
     <table width="400" align="center" border="1">
      <tr>
       <td width="100">事件号</td>
       <td width="*">事件名</td>
       <td width="100">采取动作</td>
      </tr>
         <xsl:for-each select='rule[contains(event/name, $ename)]'>
         <xsl:sort select="event/id"/>
      <tr>
       <td><xsl:value-of select="event/id"/></td>
       <td><xsl:value-of select="event/name"/></td>
       <td><xsl:value-of select="action"/></td>
      </tr>
         </xsl:for-each>
     </table>
    </xsl:template>

    </xsl:stylesheet>
    存成rule.xsl文件。
    此XSL文件中惟一的需要注意的就是多了个<xsl:param name="ename">undefined</xsl:param>,外部交互也是通过修改此一参数值来实现的。我们可以在后面的HTML文件中看到是如何来修改的参数的。

    XML文件和XSL文件都有了,还需要一个HTML的文件用于交互,如下:
    <HTML>
    <HEAD>
    <TITLE>Rule Search</TITLE>
    </HEAD>

    <script language="javascript">
    function OutputDocument(number){
     // load the xslt file
     var xslt = new ActiveXObject("Msxml2.XSLTemplate");
     var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
     xslDoc.async = false;
     xslDoc.resolveExternals = false;
     xslDoc.load("rule.xsl");
     xslt.stylesheet = xslDoc;
     
     var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
     xmlDoc.async = false;
     xmlDoc.resolveExternals = false;
     xmlDoc.load("rule.xml");

     var xslProc = xslt.createProcessor();
     xslProc.input = xmlDoc;
     //就是这里实现了修改XSL中的参数值!!
     xslProc.addParameter("ename", number);
     xslProc.transform();

     return xslProc.output;
    }

    function ClickButton()
    {
     var txt = document.getElementById("ename").value;
     var str = OutputDocument(txt);
     this.frames.main.document.write(str);
     this.frames.main.document.close();
    }
    </script>

    <BODY>

    <center>事件名包含:<input type="text" value="" id="ename" maxlength="16"/> <input type="button" value="搜索" onClick="ClickButton()"/></center>

    <iframe src="about:blank" id="main" name="main" width="100%" height="100%" scrolling="auto" frameborder="0"/>

    </BODY>
    </HTML>

    将这三个文件放到同一个目录下面,打开此html文件,在输入框中填上“TFTP”(注意大小写),点“搜索”,看到结果了吧:-)
    再填入“Telnet”,点“搜索”看看:-)


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/5 14:23:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 5:39:58

    本主题贴数3,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  通过页面交互来组织XSLT转换XML文件的输出(3380字) - x5duan,2005年7月5日
        回复:  输入TFTP以及Telnet以后,什么都没显示啊?怎么回事呢?(52字) - NewBieInXML,2005年8月30日
        回复:  VeryVeryVeryVeryVeryVeryVery Good(33字) - prostickman,2005年8月25日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms