`
amcucn
  • 浏览: 293802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在HTML,JSP当中使用XML与XSL展示部分数据

阅读更多

HTML,JSP当中使用XMLXSL展示部分数据

需求分析:

通常项目当中有一些固化或不经常变化的内容,且这些内容通常是使用XML保存。

但在前台页面上需要使用到这些数据,而且有可能会将其中的内容做为网页的一部分用来展示给用户。通常的做法是使用JavaScript读取这个XML进行解释,然后再创建相应的HTML标签,并将内容插入相应的位置上。这种做法不但需要编写大量的JS,而且会影响页面加载速度。如果利用XML+XSL进行数据的格式转化,再利用JS动态加载XMLXSL,便可以很方便的获取所需的数据,而且调用不同的XSL,可以展示不同的格式。

所牵涉到的基本技术:

1:XML

2:XPATH

3:JavaScript

先看一个示例:

如图

 

这是一个使用XML+XSL生成的地区下拉列表。

整个演示所需文档如下:

一、地区信息来自XML文档

 Area.xml 

<root>
    <!-- i_ID,n_名称,p_上一级ID,s_是否有下级  -->
    <a i="107" n="安徽省" p="0" s="false"/>
    <a i="93" n="北京市" p="0" s="false"/>
    <a i="103" n="北京市" p="93" s="false"/>
    <a i="77" n="长宁区" p="67" s="true"/>
    <a i="105" n="朝阳区" p="103" s="false"/>
    <a i="91" n="崇明县" p="67" s="true"/>
    <a i="89" n="奉贤区" p="67" s="true"/>
    <a i="108" n="福建省" p="0" s="false"/>
    <a i="109" n="甘肃省" p="0" s="false"/>
    <a i="110" n="广东省" p="0" s="false"/>
    <a i="101" n="广西区" p="0" s="false"/>
    <a i="111" n="贵州省" p="0" s="false"/>
    <a i="112" n="海南省" p="0" s="false"/>
    <a i="130" n="合肥市" p="107" s="false"/>
    <a i="113" n="河北省" p="0" s="false"/>
    <a i="114" n="河南省" p="0" s="false"/>
    <a i="102" n="黑龙江" p="0" s="false"/>
    <a i="80" n="虹口区" p="67" s="true"/>
    <a i="97" n="湖北省" p="0" s="false"/>
    <a i="96" n="湖南省" p="0" s="false"/>
    <a i="75" n="黄浦区" p="67" s="true"/>
    <a i="115" n="吉林省" p="0" s="false"/>
    <a i="85" n="嘉定区" p="67" s="true"/>
    <a i="116" n="江苏省" p="0" s="false"/>
    <a i="117" n="江西省" p="0" s="false"/>
	<a i="86" n="金山区" p="67" s="true"/>
	</root>  <!-- 演示数据,与图片所示有所不同-->	

 

以上是一个地区的XML文档,其中包含了三级省市区数据,通过属性"p"来寻找上一级,如果p=0,则代表当值数据为省份(顶级)

 

二、XSL文档

<?xml version="1.0" encoding="UTF-8"?>
        <!--定义当前XML文档为xsl格式-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!--math表示匹配当前XML所有内容,也可以指定具体的某些值,取值方式参考XPATH语法-->
<xsl:template match="/">
    <!--在此可以编写HTML代码-->
    <h2>地区下拉表</h2>
    <div>
        <div>省市:</div>
        <div>
            <select>
                <!--读取root下所有属性p=0的a标签,进行循环-->
                <xsl:for-each select="root/a[@p='0']">
                    <!--对于需要给HTML标签赋值时,只能使用{}来取值,
                        不可以使用<xsl:value-of>的形式取值。这里取的是当前标签的i属性的值,
                        因为是在循环里,所以每次取值都不同-->
                    <option value="{@i}">
                        <!--如果是在HTML内,或外面赋值,则只能使用<xsl:value-of>的形式取值,
                        这里取的是当前标签的n属性的值-->
                        <xsl:value-of select="@n"/>
                    </option>
                </xsl:for-each>
            </select>
        </div>
    </div>
</xsl:template>
</xsl:stylesheet>
	

 

三、在准备好了XML,XSL之后,剩下的事就是如何在页面上根据需要调用此XML文档来显示了,这里我们需要使用JS来加载XMLXSL并对其进行解析。由于IEFF解析XMLXSL的方法及加载XML的方法不同,所以这里采用jquery框架进行判断,也可以自行写相关的方法以区别IE\FF的不同。

用到的两个最主要的方法

1load(xmlPath) 所有方法都有部分代码基于jquery

//兼容大部分浏览器  读取外部XML文档返回xmlDoc对象
function load(x) {
    var xmlDoc;
    if ($.browser.msie) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.load(x);
        return xmlDoc;
    } else if ($.browser.safari) {
        xmlDoc = getxml(x).responseXML;
        return xmlDoc;
    } else if ($.browser.mozilla) {
        xmlDoc = document.implementation.createDocument('', '', null);
        xmlDoc.async = false;
        xmlDoc.load(x);
        return xmlDoc;
    } else {
        xmlDoc = getxml(x).responseXML;
        return xmlDoc;
    }
}

//供load方法调用
function getXmlHttp() {
    var xmlhttp;
    if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlhttp;
    } else if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
        return xmlhttp;
    }
    return xmlhttp;
}
//供load方法调用
function getxml(x) {
    var xmlhttp = getXmlHttp();
    if (xmlhttp != null) {
        xmlhttp.open("GET", x, false);
        xmlhttp.send(null);
        return(xmlhttp);
    } else {
        alert("对不起,您的浏览器不支持 XMLHTTP.11");
        return false;
    }
}	

2showXML() 在网页上显示XML内容,并使用相应的XSL进行解析

<!--EndFragment-->

/**
 * 加载XML及对应的XSL文档,直接在页面上进行显示
 * @param xml XML路径
 * @param xsl XML样式文件
 */
function showXML(xml, xsl) {
    // Load XML 这里的load方法调用的是上面的laod方法
    var xmlDoc = load(xml);
    // Load XSL
    var xslDoc = load(xsl);
    // 如果是非IE浏览器,则对解析器进行重写
    if (!$.browser.msie) {
        Node.prototype.transformNode = function (oXslDom) {
            var oProcessor = new XSLTProcessor();
            oProcessor.importStylesheet(oXslDom);
            var oResultDom = oProcessor.transformToDocument(this);
            var xmls = new XMLSerializer();
            var sResult = xmls.serializeToString(oResultDom);
            if (sResult.indexOf(" <transformiix:result") > -1) {
                sResult = sResult.substring(sResult.indexOf(">") + 1, sResult.lastIndexOf(" <"));
            }
            return sResult;
        };
    }
    document.write(xmlDoc.transformNode(xslDoc));
}	

  

四、到此所有准备工作已完成,可以开始编写 HTML代码,当前你也可以将这此内容放入其它的页面当中如JSP\ASP

 

<!--EndFragment-->

 

<html>
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
      <title>Simple jsp page</title></head>
  <script type="text/javascript" src="/js/serv/comm/jquery.js"></script>
  //这个JS包含有上面的laod等方法
  <script type="text/javascript" src="/js/public/comm.js"></script>

  <body>
    <script type="text/javascript">
               showXML("/x/comm/area.xml","/test/xml/area.xsl");
    </script>
  </body>

</html>	

 

<!--EndFragment-->

<!--EndFragment-->

以下附件为整个文章涉及到的内容,但不能直接在本地打开浏览,原因是load方法不能直接读取本地文件,需要部署到项目当中。

有问题或有好的建议,欢迎大家一起探讨

<!--EndFragment-->

<!--EndFragment-->

<!--EndFragment-->
  • 大小: 28.1 KB
  • 大小: 19.1 KB
分享到:
评论

相关推荐

    XSL.rar_ XML-JSP_.CHM_XML chm_xml xsl_xsl

    在Web开发领域,XSL与XML和JSP的结合使用,能够实现动态数据的高效处理和展现。 XML(Extensible Markup Language)是一种标记语言,用于存储和传输结构化数据。它的设计目标是传输和存储数据,而非显示数据。XML...

    使用JavaScript+XML+XSL创建树形目录

    XSLT(XSL Transformations)是XSL的一部分,可以将XML数据转换成其他格式,如HTML、PDF等。 接下来,我们将详细讲解创建树形目录的步骤: **步骤1:定义XML数据** 首先,我们需要创建一个XML文件来存储树形目录的...

    XML数据操作接口 如何利用JSP操作XML文件

    Data Island是一种技术,允许XML数据与JavaScript结合在Web页面中使用,增强了动态交互性。 XML文档的注释使用`&lt;!-- --&gt;`语法,例如在`9-04.xml`中,注释被用来解释文档的部分内容。此外,XML支持字符和实体引用,...

    JSP结合XML+XSLT将输出转换HTML

    通过这种方式,我们可以利用JSP、XML和XSLT将结构化的XML数据转化为用户友好的HTML格式,从而在Web应用程序中展示。这种技术在处理复杂的数据结构和自定义布局时非常有用,因为它允许我们分离数据和表现层,遵循了...

    jsp+xml的一个小demo

    总结来说,JSP和XML的结合使得开发者可以在JSP页面中处理和展示XML数据,同时利用XML的结构化特性进行数据的组织和交换。这种组合在构建动态、数据驱动的Web应用时非常有用,尤其在需要与Web服务交互或处理结构化...

    JSP+XML构架网站的实例

    总的来说,JSP+XML架构网站的实例展示了如何利用XML进行数据标准化,动态生成XML文档,并通过XSL进行数据转换,以实现灵活且高效的网页呈现。这种技术组合在处理复杂数据和构建可扩展的Web应用程序时具有显著优势。

    中英文文献_JSP与XML的结合

    上面的代码展示了如何使用自定义标签库中的`&lt;JAXP:transform&gt;`标签,通过指定的XML文档和XSL样式表进行数据转换并输出结果。 通过JSP与XML的结合,开发者能够构建更复杂、可扩展的Web应用,同时保持代码的清晰性...

    xsl标识库jar包

    XSLT与XSL紧密相关,后者包括XSLT和XPath(XML Path Language),XPath用于在XML文档中查找数据。 在JSP中集成XSLT,首先需要将xsl标识库jar包引入到项目的类路径中。这个jar包可能包含了如SAX(Simple API for XML...

    WEB图形格式SVG及基于XML+XSL的动态生成技术

    XSL是一种用于转换XML文档的语言,它允许开发者定义一套规则,将源XML数据转换为另一种格式,比如HTML、PDF,甚至是SVG。这种方式实现了数据与表现的完全分离,使内容的管理更加灵活,同时保证了数据的结构清晰,...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    jakarta-taglibs-xsl-1.0.1

    XSL(Extensible Stylesheet Language)是一种用于转换XML文档格式的语言,而XSLT(XSL Transformations)是XSL的一部分,用于将XML数据转换成其他形式,如HTML、PDF或文本。Jakarta Taglibs XSL 1.0.1库则为JSP...

    XML语法的JSP文件.ppt

    【XML语法的JSP文件】和【JSP】的相关知识点主要涵盖了如何在JSP中使用XML格式来编写页面,以及与XML处理相关的技术,如JAXP、DOM、SAX和XSLT,以及JSTL的XML处理标签库。以下是对这些知识点的详细解释: 1. **JSP ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    用XML和件jsp做的论坛

    6. **XSLT转换**:如果论坛使用XML存储数据,XSLT(XSL Transformations)可以用来转换XML数据为HTML,以便在网页上展示。这提供了数据和视图的分离,使得界面设计更加灵活。 7. **安全性考虑**:在使用JSP和XML时...

    动态Web数据库技术—基于JSP和XML技术实现教案+源码

    - **XML与数据库**:XML可以与数据库进行交互,例如使用XSLT(XSL Transformations)转换XML数据,或者通过XPath(XML Path Language)查询XML文档中的特定节点。此外,某些数据库如Oracle支持XML类型的列,可以直接...

    计算机软件-编程源码-JSP and XML.zip

    3. **XML与JSP结合:** 在JSP中,XML数据可以被解析并展示在页面上,或者通过JSTL的`&lt;c:forEach&gt;`和`&lt;xsl:transform&gt;`标签进行处理。XSLT(Extensible Stylesheet Language Transformations)用于转换XML文档,将XML...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    XML.rar_基于xml

    在这个名为"XML.rar_基于xml"的压缩包中,包含了多个与教室管理相关的文件,它们可能是一个简单的教务管理系统的一部分。让我们逐一解析这些文件: 1. Rmjg.jsp:这可能是“教室管理”(Room Management)的Java...

    宿舍管理系统(jsp xml sql2000)

    本系统利用JSP开发环境 tomcat 6.0 测试 其中查询部分均利用了XML转换 XSL显示, 数据库利用sql 2003 功能包括 数据添加 修改 删除 以及查询,适合初学JSP 和 XML的初学者。

Global site tag (gtag.js) - Google Analytics