Maison > Article > développement back-end > Notes d'étude Crazy XML (6) ----------------Extension XML
Les connaissances de base et les exigences de format de XML ne seront pas abordées ici
Ce qui suit est un résumé des bases de XML
Première connaissance
http://www.php.cn/
Bases
http://www.php .cn/
Ce qui suit est une extension de XML incluant les attributs et la validation XML
Les éléments XML peuvent contenir des attributs dans la balise d'ouverture, similaires au HTML.
Les attributs fournissent des informations supplémentaires sur l'élément.
Du HTML, vous vous souviendrez de ceci : 08c069fd51d2c2d81cee4e0f0ed64316 L'attribut "src" fournit des informations supplémentaires sur l'élément a1f02c36ba31691bcfe87b2722de723b
En HTML (et en XML), les attributs fournissent des informations supplémentaires sur un élément :
<img src="computer.gif"> <a href="demo.asp">
Les attributs fournissent souvent des informations qui ne font pas partie des données. Dans l'exemple suivant, le type de fichier n'a pas d'importance pour les données, mais il est important pour le logiciel qui doit traiter cet élément :
<file type="gif">computer.gif</file>
Les valeurs d'attribut doivent être entourées de guillemets, mais des guillemets simples et doubles peuvent être utilisés. Par exemple, le sexe d'une personne, la balise de personne peut être écrite comme ceci :
<person sex="female">
Ou cela peut également être écrit :
<person sex='female'>
Remarque : Si la valeur de l'attribut elle-même contient des guillemets doubles, il est nécessaire d'utiliser des guillemets simples, comme cet exemple :
<gangster name='George "Shotgun" Ziegler'>
Ou vous pouvez utiliser des références d'entité :
<gangster name="George "Shotgun" Ziegler">
Regardez ces exemples :
<person sex="female">Anna Smith female Anna Smith
Dans le premier exemple, le sexe est une propriété. Dans le deuxième exemple, le sexe est un élément enfant. Les deux exemples fournissent les mêmes informations.
Aucune règle ne nous indique quand utiliser les attributs et quand utiliser les éléments enfants. D'après mon expérience, en HTML, les attributs sont pratiques à utiliser, mais en XML, vous devriez essayer d'éviter d'utiliser des attributs. Si les informations ressemblent beaucoup à des données, utilisez des éléments enfants.
Les trois documents XML suivants contiennent exactement les mêmes informations :
Le premier L'attribut date est utilisé dans l'exemple :
<note date="08/08/2008"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
L'élément date est utilisé dans le deuxième exemple :
<note> <date>08/08/2008</date> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
L'élément date étendue est utilisé dans le troisième exemple (ce sont mes favoris) :
<note> <date> <day>08</day> <month>08</month> <year>2008</year> </date> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
Quelques problèmes causés par l'utilisation des attributs :
Les attributs ne peuvent pas contenir plusieurs valeurs (les éléments peuvent)
Les attributs ne peuvent pas décrire la structure arborescente (les éléments le peuvent)
Les attributs ne sont pas facilement extensibles (pour des modifications futures)
Les attributs sont difficile à lire Et maintenance
Veuillez essayer d'utiliser des éléments pour décrire les données. Au lieu de cela, utilisez simplement des attributs pour fournir des informations indépendantes des données.
Ne faites pas quelque chose de stupide comme ça (ce n'est pas ainsi que XML doit être utilisé) :
<note day="08" month="08" year="2008" to="George" from="John" heading="Reminder" body="Don't forget the meeting!"> </note>
Parfois, des références d'identification sont attribuées aux éléments. Ces index ID peuvent être utilisés pour identifier des éléments XML de la même manière que l'attribut ID en HTML. Cet exemple nous le démontre :
<messages> <note id="501"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <note id="502"> <to>John</to> <from>George</from> <heading>Re: Reminder</heading> <body>I will not</body> </note> </messages>
L'identifiant ci-dessus est juste un identifiant, utilisé pour identifier différentes notes. Cela ne fait pas partie des données de la note.
L'idée que nous essayons de vous transmettre ici est que les métadonnées (données sur les données) doivent être stockées en tant qu'attributs et que les données elles-mêmes doivent être stockées en tant qu'éléments.
Validation XML
Le XML avec une syntaxe correcte est appelé XML « bien formé ».
Le XML validé par rapport à une DTD est du XML "valide".
Un document XML "bien formé" a une syntaxe correcte.
Un document XML « bien formé » respectera les règles de syntaxe XML introduites dans les chapitres précédents :
Les documents XML doivent avoir un élément racine
Les documents XML doivent avoir des balises de fermeture
Les balises XML sont sensibles à la casse
Les éléments XML doivent être corrects Les
Les attributs XML imbriqués doivent être cités
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
Un document XML valide est un document XML « bien formé » qui adhère également aux règles de syntaxe de la Document Type Definition (DTD) :
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE note SYSTEM "Note.dtd"><note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
Dans l'exemple ci-dessus, la déclaration DOCTYPE est une référence à un fichier DTD externe. Les paragraphes suivants montrent le contenu de ce fichier.
La fonction de la DTD est de définir la structure du document XML. Il utilise une série d'éléments juridiques pour définir la structure du document :
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
Résumé sur la DTD :
http://www.php.cn/
<xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
XML 文档中的错误会终止你的 XML 程序。
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。
如果使用 HTML,创建包含大量错误的文档是有可能的(比如你忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。
使用 XML 时,这种情况不应当存在。
为了帮助您对 XML 进行语法检查,我们创建了一个 XML 验证器。
把您的 XML 粘贴到下面的文本框中,然后点击"验证"按钮来进行语法检查。
只要把 DOCTYPE 声明添加到您的 XML 中,然后点击验证按钮即可:
注释:只有在 Internet Explorer 中,可以根据 DTD 来验证 XML。Firefox, Mozilla, Netscape 以及 Opera 做不到这一点。
如何将XML显示在Html上:
从 XML 文件中加载数据,然后把数据显示为一个 HTML 表格
在上一节中,我们讲解了如何通过 JavaScript 来解析 XML 并访问 DOM。
本例遍历一个 XML 文件 (cd_catalog.xml),然后把每个 CD 元素显示为一个 HTML 表格行:
<html> <body> <script type="text/javascript"> var xmlDoc=null; if (window.ActiveXObject) {// code for IExmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } else if (document.implementation.createDocument) {// code for Mozilla, Firefox, Opera, etc.xmlDoc=document.implementation.createDocument("","",null); } else { alert('Your browser cannot handle this script'); } if (xmlDoc!=null) { xmlDoc.async=false; xmlDoc.load("cd_catalog.xml"); document.write("<table border='1'>"); var x=xmlDoc.getElementsByTagName("CD"); for (i=0;i<x.length;i++) { document.write("<tr>"); document.write("<td>"); document.write( x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); document.write("</td>"); document.write("<td>"); document.write( x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); document.write("</td>"); document.write("</tr>"); } document.write("</table>"); } </script> </body> </html>
检测浏览器,然后使用合适的解析器来加载 XML
创建一个 HTML 表格(c3eabfe0f2ab8a9eadae05ced4d2507b)
使用 getElementsByTagName() 来获得所有 XML 的 CD 节点
针对每个 CD 节点,把 ARTIST 和 TITLE 中的数据显示为表格数据
用 f16b1740fad44fb09bfe928bcc527e08 结束表格
XMLHttpRequest
XMLHttpRequest 对象是开发者的梦想,因为您能够:
在不重新加载页面的情况下更新网页
在页面已加载后从服务器请求数据
在页面已加载后从服务器接收数据
在后台向服务器发送数据
所有现代的浏览器都支持 XMLHttpRequest 对象。
实例:当键入文本时与服务器进行 XML HTTP 通信。
通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象。
在所有现代浏览器中(包括 IE 7):
xmlhttp=new XMLHttpRequest()
在 Internet Explorer 5 和 6 中:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
TIY
注释:onreadystatechange 是一个事件句柄。它的值 (state_Change) 是一个函数的名称,当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。仅在状态为 4 时,我们才执行代码。
我们的实例在 open() 的第三个参数中使用了 "true"。
该参数规定请求是否异步处理。
True 表示脚本会在 send() 方法之后继续执行,而不等待来自服务器的响应。
onreadystatechange 事件使代码复杂化了。但是这是在没有得到服务器响应的情况下,防止代码停止的最安全的方法。
通过把该参数设置为 "false",可以省去额外的 onreadystatechange 代码。如果在请求失败时是否执行其余的代码无关紧要,那么可以使用这个参数。
XML实例:
请看下面这个 XML 文档 ( "cd_catalog.xml" ),它描述了一个 CD 目录:
<?xml version="1.0" encoding="ISO-8859-1"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> . . ... more ... .
为了加载 XML 文档 (cd_catalog.xml),我们使用了与 XML 解析器那一节中相同的代码:
var xmlDoc; if (window.ActiveXObject) { // code for IE xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } else if (document.implementation.createDocument) { // code for Firefox, Mozilla, Opera, etc. xmlDoc=document.implementation.createDocument("","",null); } else { alert('Your browser cannot handle this script'); } xmlDoc.async=false; xmlDoc.load("cd_catalog.xml");
在本代码执行后,xmlDoc 成为一个 XML DOM 对象,可由 JavaScript 访问。
以下代码使用来自 XML DOM 对象的数据来填充一个 HTML 表格:
document.write("<table border='1'>"); var x=xmlDoc.getElementsByTagName("CD"); for (var i=0;i<x.length;i++) { document.write("<tr>"); document.write("<td>"); document.write( x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); document.write("</td>"); document.write("<td>"); document.write( x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); document.write("</td>"); document.write("</tr>"); } document.write("</table>");
针对 XML 文档中的每个 CD 元素,会创建一个表格行。每个表格行包含两个表格数据单元,其中的数据来自当前 CD 元素的 ARTIST 和 TITLE。
XML 数据可以拷贝到任何有能力显示文本的 HTML 元素。
下面的代码为 HTML 文件的 93f0f5c25f18dab9d176bd4f6de5d30e 部分。这段代码从第一个 d15114bf3dc8d8fe2e2887944c735e50 元素中获得 XML 数据,然后在 id="show" 的 HTML 元素中显示数据:
var x=xmlDoc.getElementsByTagName("CD"); i=0; function display() { artist= (x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); title= (x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); year= (x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue); txt="Artist: "+artist+"<br />Title: "+title+"<br />Year: "+year; document.getElementById("show").innerHTML=txt; }
HTML 的 body 元素包含一个 onload 事件属性,它的作用是在页面已经加载时调用 display() 函数。body 元素中还包含了供接受 XML 数据的 a1862d91ae37e8ab9716d1c936937a12 元素。
<p id='show'></p> </body>
通过上例,你只能看到来自 XML 文档中第一个 CD 元素中的数据。为了导航到数据的下一行,必须添加更多的代码。
为了向上例添加导航(功能),需要创建 next() 和 previous() 两个函数:
function next() { if (i<x.length-1) { i++; display(); } } function previous() { if (i>0) { i--; display(); } }
next() 函数确保已到达最后一个 CD 元素后不显示任何东西,previous () 函数确保已到达第一个 CD 元素后不显示任何东西。
通过点击 next/previous 按钮来调用 next() 和 previous() 函数:
<input type="button" onclick="previous()" value="previous" /> <input type="button" onclick="next()" value="next" />
以上就是疯狂XML学习笔记(6)-----------XML拓展的内容,更多相关内容请关注PHP中文网(www.php.cn)!