XML使用总结(一)

XML使用总结(一):

XML是一种可拓展的标记语言,被设计用来描述、存储及传递数据的语言体,而它的标签没有被预定义,需要用户自行定义,是W3C推荐的数据存储和传递的标准标记语言。

·     XML与HTML?

·     XML的用途?

·     XML结构语法?

·     XML元素属性?

·     XML的验证?

·     XML的解析?

一、XML与HTML

我们知道HTML也是典型的标记语言,那么它们的区别:

1、为不同的目标而设计

XML设计用来存储描述和传递数据的,焦点在于数据内容;而HTML被设计用来显示数据的,焦点在于数据的外观展示。

2、XML不是HTML的替代品

XML不是HTML的替代品,它是一种独立于软件和硬件的数据传递工具,前者是用来传递数据,而后者是用来显示数据的。

二、XML的用途

XML应用在Web开发的许多方面,常用在数据存储、传递和共享,更多用途如下所示:

1、简化数据传输

通过XML,可以轻松的在不同系统平台间传递数据,可以减少系统移植,不同应用程序间交互数据所带来的数据处理复杂问题。

2、简化数据共享

XML是以纯文本形式存储数据,因此提供了一种独立与软件和硬件的数据存储方式,使不同应用程序共享数据更容易。

3、互联网语言

很多互联网语言都是通过XML创建的:

XHTML  --新版的HTML

WSDL  --描述Web Services

WAP与WML  --用于手持设备的语言

RSS  --用于RSS feed语言

RDF与OWL  --描述资源和本体

SMIL  --描述针对web的多媒体

4、HTML数据分离

通过XML,数据独立存储在文件中,这样可以只专注与HTML的布局和显示,并确保修改底层数据不再对HTML修改,而且实现方式比较简单,只需要通过几行JavaScript代码就可以读取XML文件内容,并动态显示到HTML中。

三、XML结构语法

1、结构

XML描述体是一种树结构,从“根部”开始,然后拓展到“枝叶”结束,结构图如下:

上面的结构图描述了一类商品的单品属性,对应的XML描述文件:

<?xml version="1.0" encoding="UTF-8"?>

<producttype>

<product category="PHP">

<no lang="中译文">NOC0001</no>

<name>PHP高级设计教程</name>

<price>88.99</price>

<time>2015.12.30</time>

</product>

<product category="JAVA">

<no lang="中译文">NOC0002</no>

<name>Thinking inJava</name>

<price>102.99</price>

<time>2004.03.30</time>

</product>

<product category="WEB">

<no lang="英原版">NOC0003</no>

<name>WEB高级开发教程</name>

<price>78.99</price>

<time>2012.07.30</time>

</product>

</producttype>

NOTE:

XML文件第一行声明XML的版本为1.0,编码格式为utf-8格式;

<producttype>为根元素,它下面可以有多个子元素,根元素是必须有的元素;

<product category="">为子元素,也是下面属性的根元素,category为该元素的属性,该元素下面即为四个子元素。

</producttype>为对应上面的跟元素的结束标记,同样</product>也为对应的结束标记。

2、语法

<?xml version="1.0" encoding="UTF-8"?>

<root>

<child>

<subchild>...</subchild>

</child>

...

</root>

NOTE:

XML文档描述必须有根元素;

XML元素必须有对应的关闭标记;

XML元素标记区分大小写;

XML元素的属性值必须加引号;

XML中空格保留,多个连续空格合为一个空格;

XML实体引用:

对于某些特殊字符,XML编译器会把它当作特殊的处理,如:< 符号,会被当作新的元素的开始,所以元素内容含有该符号时,就会报错,解决的办法是引用实体解决:

例如:

<note>if age < 30 then</note>  -这个是错误的;

<note>if age &lt; then</note>  -这个是正确的;

预定义的实体符号:

NOTE:

对于<和&在XML中是非法的,而>是合法的,但是这里建议使用实体引用代替直接使用;

在XML中的注释类似HTML:<!—comment -->;

在XML中,以LF来存储换行:

Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。

Unix 应用程序中,新行以 LF 字符存储。

Macintosh 应用程序使用 CR 来存储新行。

四、XML元素属性

1、什么是元素

元素指的是从标记的开始(含开始标签),到标记结束(含结束标记)间的部分。

元素包含内容:

元素可以包含元素,包含文本,也可以含有属性;

XML命名规则:

名字可含字母、数字及其它字符;

名字不能含数字或标点符开始;

名字不能以字符xml、XML或Xml开头;

名字不能含空格;

NOTE:

名字应该比较短,推荐使用下划线,例如:<product_name>,不建议使用特殊字符;

XML元素拓展性;

XML可以在不中断应用程序的情况下,拓展XML的内容。

2、属性

属性是对元素的补充,一般存放数据无关的数据,XML元素可以在标签开始处包含。

A、XML属性必须使用引号;

B、XML的避免使用,因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)

属性无法描述树结构(元素可以)

属性不易扩展(为未来的变化)

属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

NOTE:

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

C、下面为推荐的属性使用:

<product category="PHP">

<id>1001</id>

<no>NOC0001</no>

<name>PHP高级设计教程</name>

<price>88.99</price>

<time>2015.12.30</time>

</product>

上面的ID和no都使用了属性,它们属于数据的补充或附加数据,另外,经常会使用ID来编号元素,比如ID,它与数据本身并无必然关系。当然,有时可自行定义元素,来满足业务的数据需求。

五、XML的验证

XML的验证包含两部分:形式和合法性。语法正确的XML是形式良好的XML,而经过DTD验证的即为合法的XML,下面具体分析:

XML的验证

形式良好的XML :

·     XML 文档必须有根元素

·     XML 文档必须有关闭标签

·     XML 标签对大小写敏感

·     XML 元素必须被正确的嵌套

·     XML 属性必须加引号

NOTE:

<producttype>

<product category="PHP">

<id>1001</id>

<no>NOC0001</no>

<name>PHP高级设计教程</name>

<price>88.99</price>

<time>2015.12.30</time>

</product>

<product category="JAVA">

<id>1002</id>

<no>NOC0002</no>

<name>Thinking inJava</name>

<price>102.99</price>

<time>2004.03.30</time>

</product>

<product category="WEB">

<id>1003</id>

<no>NOC0003</no>

<name>WEB高级开发教程</name>

<price>78.99</price>

<time>2012.07.30</time>

</product>

</producttype>

形式合法的XML:

DTD是用来验证XML的结构合法性的语法规则,使用一系列合法的元素定义文档结果:

<!DOCTYPE product [

<!ELEMENT producttype(product,id,no,name,price,time) >

<!ELEMENT product(id,no,name,price,time) >

<!ELEMENT id (#PCDATA) >

<!ELEMENT no (#PCDATA) >

<!ELEMENT name (#PCDATA) >

<!ELEMENT price (#PCDATA) >

<!ELEMENT time (#PCDATA) >

]>

如何验证?

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE product SYSTEM "product.dtd">

<producttype>

<product category="PHP">

<id>1001</id>

<no>NOC0001</no>

<name>PHP高级设计教程</name>

<price>88.99</price>

<time>2015.12.30</time>

</product>

<product category="JAVA">

<id>1002</id>

<no>NOC0002</no>

<name>Thinking inJava</name>

<price>102.99</price>

<time>2004.03.30</time>

</product>

<product category="WEB">

<id>1003</id>

<no>NOC0003</no>

<name>WEB高级开发教程</name>

<price>78.99</price>

<time>2012.07.30</time>

</product>

</producttype>

NOTE:

只需要使用<!DOCTYPE product SYSTEM "product.dtd">引用,程序运行时自动编译并验证XML是否符合自定义的 DTD规则。

另外,W3C 支持一种基于 XML 的 DTD代替者,它名为 XML Schema,后续会继续总结。

六、XML的解析

1、JavaScript解析:

A、XML文件解析:

js解析脚本:

/**

* XML文档的解析脚本

*/

window.onload = function(){

// code for IE7+, Firefox,Chrome, Opera, Safari

if(window.XMLHttpRequest) {

xmlHttp = newXMLHttpRequest();

} else {                     // code for IE6, IE5

xmlHttp = newActiveXObject("Microsoft.XMLHTTP");

}

};

var xmlHttp = null;

/**

* 解析XML文件

*/

xmlparser = function(method,xmlUrl) {

if(null == xmlHttp){

return "<br/>Error Reason: xmlHttp is null!";

}

//xmlhttp.onreadystatechange =state_Change;

xmlHttp.open(method,xmlUrl,false);

xmlHttp.send();

returnxmlHttp.responseXML;

};

待解析XML文档:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE product SYSTEM "product.dtd">

<producttype>

<product category="PHP">

<id>1001</id>

<no>NOC0001</no>

<name>PHP高级设计教程</name>

<price>88.99</price>

<time>2015.12.30</time>

</product>

<product category="JAVA">

<id>1002</id>

<no>NOC0002</no>

<name>Thinking inJava</name>

<price>102.99</price>

<time>2004.03.30</time>

</product>

<product category="WEB">

<id>1003</id>

<no>NOC0003</no>

<name>WEB高级开发教程</name>

<price>78.99</price>

<time>2012.07.30</time>

</product>

</producttype>

前端页面解析:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<script src="__PUBLIC__/htmls/js/jquery-1.8.3.min.js"></script>

<script src="__PUBLIC__/htmls/js/xmlparse.js"></script>

</head>

<body>

<table id="tb_products"width="100%" border="0"
cellspacing="15"cellpadding="0">

</table>

<br/>

<a href="#" onclick="xmlParsePre();">点击我开始解析</a>

</body>

<script type="text/javascript">

xmlParsePre = function(){

// 解析

var xmlUrl = "/Project/Study/View/XML/product.xml";

var xmlDoc = xmlparser("GET",xmlUrl);

if(null == xmlDoc){

return;

}

// 获取

var domElems =xmlDoc.getElementsByTagName("product");

for(vari=0;i<domElems.length;i++) {

var id =domElems[i].getElementsByTagName("id")

[0].childNodes[0].nodeValue;

var no =domElems[i].getElementsByTagName("no")

[0].childNodes[0].nodeValue;

var name =domElems[i].getElementsByTagName("name")

[0].childNodes[0].nodeValue;

var price =domElems[i].getElementsByTagName("price")

[0].childNodes[0].nodeValue;

var time =domElems[i].getElementsByTagName("time")

[0].childNodes[0].nodeValue;

$("#tb_products").append("<tr><td>"+id+"</td><td>"+no+

"</td><td>"+name+"</td><td>"+price+"</td><td>"+time+"</td></tr>");

}

};

</script>

</html>

B、XML字符串解析:

Js解析脚本:

/**

* 解析XML字符串

*/

xmlparserStr = function(xmlStr) {

var xmlDoc = null;

if (window.DOMParser) {       // Other Explorer

var parser = newDOMParser();

xmlDoc =parser.parseFromString(xmlStr, "text/xml");

} else                                   // InternetExplorer

{

xmlDoc = newActiveXObject("Microsoft.XMLDOM");

xmlDoc.async = "false";

xmlDoc.loadXML(xmlStr);

}

return xmlDoc;

};

待解析字符串:

var xml = "<producttype>";

xml += "<productcategory=‘PHP‘><id>1001</id><no>NOC0001</no><name>PHP高级设计教程</name><price>88.99</price><time>2015.12.30</time></product>";

xml += "<productcategory=‘JAVA‘><id>1002</id><no>NOC0002</no><name>ThinkinginJava</name><price>102.99</price><time>2004.03.30</time></product>";

xml += "<productcategory=‘WEB‘><id>1003</id><no>NOC0003</no><name>WEB高级开发教程</name><price>78.99</price><time>2012.07.30</time></product>";

xml += "</producttype>";

前端调用解析:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<script src="__PUBLIC__/htmls/js/jquery-1.8.3.min.js"></script>

<script src="__PUBLIC__/htmls/js/xmlparse.js"></script>

</head>

<body>

<table id="tb_products"width="100%" border="0"
cellspacing="15"cellpadding="0">

</table>

<br/>

<a href="#" onclick="xmlParsePre();">点击我开始解析</a>

</body>

<script type="text/javascript">

xmlParsePre = function(){

var xml = "<producttype>";

xml += "<productcategory=‘PHP‘><id>1001</id><no>NOC0001</no><name>PHP高级设计教程</name><price>88.99</price><time>2015.12.30</time></product>";

xml += "<productcategory=‘JAVA‘><id>1002</id><no>NOC0002</no><name>ThinkinginJava</name><price>102.99</price><time>2004.03.30</time></product>";

xml += "<productcategory=‘WEB‘><id>1003</id><no>NOC0003</no><name>WEB高级开发教程</name><price>78.99</price><time>2012.07.30</time></product>";

xml += "</producttype>";

// 解析

var xmlDoc =xmlparserStr(xml);

// 获取

var domElems =xmlDoc.getElementsByTagName("product");

for(vari=0;i<domElems.length;i++) {

var id =domElems[i].getElementsByTagName("id")

[0].childNodes[0].nodeValue;

var no =domElems[i].getElementsByTagName("no")

[0].childNodes[0].nodeValue;

var name =domElems[i].getElementsByTagName("name")

[0].childNodes[0].nodeValue;

var price =domElems[i].getElementsByTagName("price")

[0].childNodes[0].nodeValue;

var time =domElems[i].getElementsByTagName("time")

[0].childNodes[0].nodeValue;

$("#tb_products").append("<tr><td>"+id+"</td><td>"+no+

"</td><td>"+name+"</td><td>"+price+"</td><td>"+time+"</td></tr>");

}

};

</script>

</html>

上面的XML文件和字符串解析的结果相同,如下:

2、待续…

好了,到这里我们总结介绍了XML的基本知识、验证及解析显示。

技术讨论群:489451956(新)

时间: 2024-09-29 09:50:09

XML使用总结(一)的相关文章

Maven中,pom.xml文件报错

一:错误消息,如下图: aus 原因是本地仓库在org.codehaus.plexus:plexus-uils:pom:3.0.20下面没有jar文件,只有一个plexus-utils-3.0.20.pom.lastUpdated,如下图: 解决:将该文件夹删掉,然后右击项目:Maven->Update Project就可以了 若pom.xml里面还有类型的报错,就像这样解决就OK了

微信5.4 AndroidManifest.xml

1 <?xml version="1.0" encoding="utf-8" ?> 2 - <manifest android:versionCode="462" android:versionName="5.4.0.48_r794734" android:installLocation="auto" package="com.tencent.mm" xmlns:and

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

logback-spring.xml的schema

<?xml version="1.0" encoding="utf-8" ?> <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"> </configuration>

Web.xml 中 metadata-complete 介绍

Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性, 该属性指定当前的部署描述文件是否是完全的. 如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解): 如果不配置该属性,或者将其设置为 false,则表示启用注解支持(和可插性支持).

关于java解析xml文件出现的问题

问题1:导入javax.xml.parsers.DocumentBuilderFactory出现问题,如图: 解决办法是:由于创建工程时有个默认的jre,重新创建工程改掉就解决了,如图: 问题2:出现1 字节的 UTF-8 序列的字节 1 无效,解决办法: 使用记事本打开xml文件--点击文件-另存为-修改编码方式为UTF-8 -覆盖保存,如图: 以后出现问题还会补充

XML

一.XML概述     定义:Extensible Makeup Language(可扩展标记语言);     作用:         1.存储数据,有良好的存储格式,多种语言通用         2.作为配置文件,许多框架都使用xml作为配置文件     语法:         1.文件后缀名必须为.xml;         2.文档声明必须写在第一行,且前面不能空格,一般写法:<?xml version="1.0" encoding="UTF-8"?>

Android 编译错误——布局 Error parsing XML: not well-formed (invalid token)

在修改了Android布局文件后,编译出现Error parsing XML: not well-formed (invalid token). 首先先排查xml文件的编码格式是否为UTF-8, <?xml version="1.0" encoding="utf-8"?> ,注意,从别处copy的要留意编码格式! 还有各个标签是否有遗漏,把鼠标箭头移到出错误的layout上 点击鼠标右键选择Source然后再选Format. 都没有问题,结果发现报错处(

MyBatis应用开发(2)应用之开发方式XML文件篇

1.1. 开发方法 有三种使用MyBatis的方法: (1)使用XML配置文件的方式. (2)使用注解方式. (3)使用API方式. 1.2. XML方式 1.2.1. 开发步骤 目标:使用MyBatis从数据库中查询t_person表的全部记录. MyBatis使用XML文件来配置数据库中的记录与Java对象之间的映射关系,实现了SQL语句和Java代码的分离. 使用MyBatis 的XML配置方式开发数据库应用的步骤如下所示: (1)编写POJO类Person. (2)编写Mapper接口P

web.xml 中的listener、filter、servlet加载及一些配置

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servlet