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 < 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,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(新) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |