`
山有峰则灵
  • 浏览: 28213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

闲人笔记2:XML

阅读更多
Extensible Markup Language (XML)
霍格沃兹有4个学院,他们分别是Gryffindor,Ravenclaw,Slytherin,Hufflepuff。Hermione,Harry,Ron他们在Gryffindor。
我们用一个简单的harry.xml文件:

<?xml version="1.0" encoding="UTF-8"?>  
<!-- introduction to XML markup -->
<Hogwarts>
	<Gryffindor>
		<student>Hermione</student>
		<student>Harry</student>  
		<student>Ron</student> 
	</Gryffindor>
	<Ravenclaw> 
		<student>Susan</student>
	</Ravenclaw>
	<Slytherin>
		<student>Malfoy</student> 
	</Slytherin>
	<Hufflepuff>
		<student>WhoKnow</student>
	</Hufflepuff>
</Hogwarts>


其中
<?xml version="1.0" encoding="UTF-8"?> 版本与编码
此外,还要注意这些
大小写敏感,<Hogwarts></Hogwarts>不可以</hogwarts>
必须是ASCII (American Standard Code for Information Interchange) 码,包含26个英文字母,0-9之间的数字,或者是特殊字符!- ?
(& 为 amp;), (< 为 &lt;),( > 为 &gt;), ( ‘ 为&apos;) ( “ 为&quot;).
如果要表示“<>&”则为<message>&lt;&gt;&amp;</message>

然后我们可以用右键,用IE浏览器打开它,如图


恩,看起来不错。不过仅仅这样描述数据很无聊的。我们再在开头加这样1行
<?xml-stylesheet type="text/xsl" href="magic.xsl"?>
href 装饰文件的位置

Extensible Stylesheet Language Transformations (XSLT)

Xsl是XML文件的修饰描述,比如,XML是数据,那么XSL就是数据的表现形式,你可以将它以任意的形式表现出来。我们新建一个magic.xsl文件
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
    	<html>
    	    <head><title>Magic School</title></head>
    	    <body>
    	        <p><b><h1>harry potter and the half blood prince</h1></b></p>
    	    <xsl:apply-templates select="school"/>
    	    </body>
    	</html>
    </xsl:template>
    <xsl:template match="school"> 
        <p align="left">
        <table border="1" width="300" bordercolor="black" bgcolor="blue">
	   <tr><b>welcome to our school <xsl:value-of select="@name"/>!!</b></tr>
            <tr bgcolor="white">
    	        <td>House_Name</td>
    	        <td>Student_Name</td>
            </tr>
            <xsl:for-each select="house">
                <tr bgcolor="white">
                    <td>
                        <xsl:value-of select="@name"/>     
                     </td>
                    <td><xsl:value-of select="."/></td>
                </tr>
            </xsl:for-each>
        </table>
        </p>
    </xsl:template>
</xsl:stylesheet>

我们再用ie打开之前的harry.xml文件

哦,就好像在浏览一个html文件,但是当我们点击查看-》源文件时。它依然是xml文件。
XSL文件作为XML的表现形式,负责表示展现数据的形式,我们来看magic.xsl文件的几个片段
<html>
    <head><title>Magic School</title></head>
    <body>
    <p><b><h1>harry potter and the half blood prince</h1></b></p>
    <xsl:apply-templates select="school"/>
    </body>
</html>

这里我们使用html来描述它,因为在xml文件的开头加了
<?xml-stylesheet type="text/xsl" href="magic.xsl"?>它会来找寻这个装饰文件。
<xsl:apply-templates select="school"/>之后寻找school的装饰模板。
使用match属性在xml中寻找,符合类型的数据
<xsl:template match="school"> 
	<table border="1">
	<xsl:for-each select="house">
     …
    </xsl:for-each>
	</table>
</xsl:template>  

可以在 for-each里再加上
<xsl:sort select = "@name" order = "ascending"/>这样来排序
<xsl:value-of select="@name"/>    
如果前面加了@符号是取属性.不加是取元素。
其它的用法,请参考相应的书籍

Document Type Definitions (DTDs) and Schema.
<!DOCTYPE MagicSchool SYSTEM "magic.dtd">
一个简单的dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT MagicSchool (school*)>
 	<!ELEMENT school ( house* )>
		<!ATTLIST school name ENTITY #REQUIRED>
		<!ELEMENT house (student*)>
			<!ATTLIST school name ENTITY #REQUIRED>
			<!ELEMENT student (#PCDATA)>

它可以约束以下的我们的xml文件,限定有school开始,有多个house元素,并且必须要有名字。
<school name="Hogwarts"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="magic_schemas.xsd">
将harry.xml中的这一行修改,使用schemas的方式

schemas语法请参考
http://www.w3schools.com/Schema/schema_example.asp
dtd和schema验证请参考
http://www.dom4j.org/dom4j-1.6.1/faq.html#how-validate
http://www.iteye.com/problems/13525

一个例子
org.hibernate.cfg包中的Configuration类需要加载hibernate所需的所有的配置文件。而这其中可能会有很多的加载方式,比如File,Dir,InputStream,jar,URL… hibernate在这里创建了一个叫XMLHelper的类来专门负责创建Dom对象。而在Configuration类中,则有很多重载的方法,已应对各种数据加载方式。
直到获得一个File的路径,然后交给XMLHelper处理,在XMLHelper中有DOMReader,SAXReader两种方式加载方式。
Errorlogger做为XMLHepler的内部类,处理在加载过程中的错误,如:

//在public SAXReader createSAXReader 方法中设置ErrorHandler
saxReader.setErrorHandler( new ErrorLogger(file, errorsList) );

//ErrorHandler中的错误处理方法
public void error(SAXParseException error) {
    log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
	errors.add(error);
    }
    public void fatalError(SAXParseException error) {
	error(error);
    }
    public void warning(SAXParseException warn) {
	log.warn( "Warning parsing XML: " + file + '(' + warn.getLineNumber() + ") " + warn.getMessage() );
    }

//设定默认的EntityResolver
public static final EntityResolver DEFAULT_DTD_RESOLVER = new DTDEntityResolver();
DTDEntityResolver做为默认的dtd验证.请参考下图和hibernate源码

1
0
分享到:
评论

相关推荐

    闲人笔记1:HelloServlet

    在这个"闲人笔记1"中,博主通过HelloServlet的实现,旨在帮助读者理解Servlet的基础工作原理以及开发流程。 首先,让我们深入了解一下Servlet的生命周期。Servlet生命周期包括加载、初始化、服务、销毁四个阶段。在...

    闲人吧资源搜索神器 8.2破解版

    闲人吧资源搜索神器是闲人吧神器,屌丝们看片搜片第一选择。闲人吧资源搜索神器可以搜索种子、资源、专辑封面并提供下载,还可以直播电视、云点播。 可以直播电视、云点播

    闲人桌面正式版

    【闲人桌面正式版】是一款桌面管理软件,其核心特性在于支持无限多的二级分类功能。这使得用户在整理电脑桌面上的各种文件、快捷方式、图标时,能够更加有序、高效地进行。对于那些需要频繁处理大量文件和信息的用户...

    闲人Flash播放器

    闲人Flash播放器是一款专为用户设计的Flash内容播放软件,尤其在Adobe公司宣布停止对Flash Player支持后,这类播放器变得更为重要。Flash技术曾是互联网上动态内容和交互式应用的重要载体,广泛用于游戏、动画以及...

    闲人桌面免费版(Desktop ET.Free) v1.0

    2. **图标管理**:提供便捷的图标整理功能,用户可以自由调整桌面图标的布局,创建快捷方式文件夹,使桌面更加整洁有序。 3. **小工具集成**:内置多种实用小工具,如天气预报、日历、时钟等,这些小工具可以直接在...

    闲人 强大IP代理获取 V1.0

    闲人 强大IP代理获取 V1.0

    初中语文文摘生活闲人

    【标题】:闲人与文摘中的生活哲学 【描述】:本文探讨了"闲人"的概念,以及在日常生活中,闲人所蕴含的深远意义和生活态度。 【标签】:生活哲学,闲人,文人,思想火花 在我们的社会中,“闲人”这个词往往带有...

    IOI1998矩形周长加强版数据闲人勿下

    【闲人勿下】数据...............【闲人勿下】数据...............【闲人勿下】数据...............【闲人勿下】数据...............【闲人勿下】数据...............【闲人勿下】数据...............【闲人勿下】...

    使用erlang自带的处理日常的xml

    这个是平时工作中使用到的xml处理,使用的是erlang自带的方法加上自已的一个调整使用的,没找到可以选1分的地方

    闲人概念网志程序(Blog ET.Free) v1.0

    为了提高博客的搜索引擎可见度,Blog ET.Free可能内置了SEO优化功能,包括自定义元标签(如标题、描述、关键词)、URL结构优化、XML站点地图生成等。这些功能有助于提升博客在搜索结果中的排名,吸引更多的访问流量...

    闲人送饭系统

    2. **Java后端编程**:Java是用于开发Web应用的常用后端语言。在这个项目中,Java可能被用来编写Servlets,它们是运行在服务器端的Java类,负责处理HTTP请求并生成响应。Java还可能用于实现业务逻辑,如订单管理、...

    如何促进对“闲人”的深度学习——重教《记承天寺夜游》.pdf

    在深入探讨如何促进对“闲人”的深度学习之前,我们需要先明确几个核心概念。首先,文章标题中的“闲人”指的是苏轼《记承天寺夜游》中的主体思想和意境,这个概念并非表面上的闲散之人,而是有着深层次的文化内涵和...

    闲人建站平台(站群系统)源码 v1.0.zip

    闲人建站平台(站群系统)源码功能介绍: 查询管理:创建查询 查询管理 表信息管理 SQL模版管理 模版管理:标签维护 模版管理 脚本管理 地址映射 在线问卷:试卷管理 用户答题管理 系统管理:插件管理 插件分类...

    闲人资讯网DHTMLBOOK预览版

    2. **VBScript或JScript**:作为ASP的默认脚本语言,VBScript和JScript的理解至关重要。VBScript更接近于Visual Basic,而JScript是JavaScript的微软版本,两者都可以用来编写ASP页面的逻辑。 3. **数据库集成**:...

    闲人桌面程序 v2.0 正式版

    在这样的背景下,"闲人桌面程序 v2.0 正式版"的推出,无疑为追求个性化桌面体验的用户带来了一丝新鲜空气。作为一款旨在提升用户日常电脑操作舒适度和效率的软件,它不仅仅是一个简单的桌面美化工具,更是一个功能...

    网络学子修改的闲人桌面图片管理系统

    2. 搜索功能:集成强大的搜索工具,用户可以通过关键词、标签或者日期等条件快速找到所需的贺卡图片,节省了手动翻阅的时间。 3. 图片预览:支持快速预览图片,无需打开多个文件,只需在列表中就能浏览图片的缩略图...

    闲人站群--建站平台源码

    【闲人站群--建站平台源码】是一款基于.NET开发框架构建的网站管理系统源代码,主要用于快速搭建和管理多个网站。这个系统是原创设计,允许用户自由使用,但需尊重作者的著作权益,保留相应的作者信息。在提供的资源...

    qsort测试,闲人勿下

    标题中的“qsort测试”指的是一个关于C++标准库中的`qsort`函数的测试程序。这个测试可能包含了对`qsort`函数不同用法的验证,以及与C++标准库中的`std::sort`以及C运行时库(CRT)中的排序函数进行的性能比较。...

    城市闲人主题的BLOG网页模板下载.zip

    城市闲人主题的BLOG网页模板下载.zip

    城市闲人BLOG网页模板

    城市闲人BLOG网页模板是一种专门用于创建个人博客的网页设计资源,旨在为用户提供一个具有城市风格和悠闲氛围的在线日记或文章分享平台。通过这个模板,你可以快速地搭建起自己的博客网站,无需具备深厚的编程知识,...

Global site tag (gtag.js) - Google Analytics