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是以纯文本形式存储数据。因此提供了一种独立与软件和硬件的数据存储方式,使不同应用程序共享数据更easy。

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描写叙述体是一种树结构,从“根部”開始,然后拓展到“枝叶”结束,结构图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上面的结构图描写叙述了一类商品的单品属性。相应的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(新)

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

  1. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  2. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  3. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

  4. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  5. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

  6. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  10. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

随机推荐

  1. DoTween 部分中文文档

    前言 DOTween现在还处于 alpha,所以还有一些缺失的功能(如路径插件,附加回调和其它的tween选项),这个文档在不久的将来可能会改变. 一.术语 Tweener 一个tween控制valu ...

  2. select 下拉框的选中项的change事件

    HTML文件 <span style="float: left;">类      型:   <select id="type" class=& ...

  3. linux selenium运行chrome

    chrome版本要和chromedriver版本匹配才能正常运行.

  4. 用nodejs和js写增删查模块

    文件目录如下:public是静态资源文件,index.html入门页面,server.js就是用nodejs创建的服务端代码,users.json就类似是数据库. 目录 显示界面 listUsers ...

  5. shoppingCart.js

    ylbtech-JavaScript-util: shoppingCart.js 购物车脚本 1.A,JS-效果图返回顶部   1.B,JS-Source Code(源代码)返回顶部 1.B.1,m. ...

  6. Struts2实现登录权限访问控制

    目录: Ⅰ 条件 Ⅱ 目的 Ⅲ 分析 Ⅳ 实现 Ⅴ 具体代码实现 ------------------------------------------------------------------- ...

  7. 编译安装Apache httpd和php搭建KodExplorer网盘

    编译安装Apache httpd和php搭建KodExplorer网盘 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    httpd-2.2.31        php- ...

  8. 将 xml 文件 转为 DataTable

    private static DataTable CreateDataTable(string table) { DataSet dataSet = new DataSet(); string dat ...

  9. iOS学习(项目中遇到的错误1)

    1.[AppModel copyWithZone:]: unrecognized selector sent to instance 0x7ffda9f4cf70 *** Terminating ap ...

  10. DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...