xml入门简介--两天学会xml
前言
在很久以前,筆者曾見到過1000+頁的xml書,里面還有n多的概念,XSL,Xquery,讓人頭痛。無奈最近需要用到,所以在w3c惡補(bǔ)了一下。以下大致整理了一下相關(guān)概念,但是對XSL等派生語言沒有詳細(xì)的展開。
XML簡介
XML語法
Xml驗(yàn)證
查看xml
xml轉(zhuǎn)化為html
xml解析器
工具
xml相關(guān)概念
參考文章
?
XML簡介
XML 指可擴(kuò)展標(biāo)記語言
XML 被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù)
?
XML 與 HTML 的主要差異
XML 不是 HTML 的替代
XML 和 HTML 為不同的目的而設(shè)計(jì):
XML 被設(shè)計(jì)為傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
HTML 被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
?
什么是 XML?
XML 指可擴(kuò)展標(biāo)記語言(EXtensible Markup Language)
XML 是一種標(biāo)記語言,很類似 HTML
XML 的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
XML 標(biāo)簽沒有被預(yù)定義。您需要自行定義標(biāo)簽。
XML 被設(shè)計(jì)為具有自我描述性(簡單地說就是XML以樹形結(jié)構(gòu)展開,通過元素、子元素和屬性描述,讓人一看就懂)。
XML 是 W3C 的推薦標(biāo)準(zhǔn)
?
我覺得初學(xué)者可能會(huì)走近的誤區(qū):
1. XML是不是HTML的取代者
不是。寫得好的html應(yīng)該是一個(gè)well-formed的xml文檔,其他方面最好不要把他們放在一個(gè)水平線上比較
2. XML是不是數(shù)據(jù)庫的取代者
不是。
3. XML是不是...的取代者
都不是。
這個(gè)結(jié)論可能聽上去很滑稽:XML是非常非常重要的東西,但它什么都取代不了。
但這并不奇怪,有人把它比做ASCII標(biāo)準(zhǔn),他們是一切一切的基礎(chǔ),但并沒有(也不需要)取代什么。(但是就如同ASCII取代了一些沒有成大器的字符集定義,
XML也會(huì)取代你在應(yīng)用中自己定義的一些數(shù)據(jù)傳輸規(guī)范,但沒有什么特別主流的東西。)
剛開始學(xué)XML(或者說沒開始學(xué)之前)的時(shí)候最愛問的一個(gè)問題肯定是:使用XML能給我?guī)硎裁春锰?#xff1f;
我覺得從某種角度上說,使用XML有些象使用OO面向?qū)ο?#xff1a;
-你可以用它,你也可以不用它。
-如果你的應(yīng)用非常簡單,用它不一定方便,沒準(zhǔn)兒用了效果還會(huì)更差。
-和其他實(shí)際東西比如數(shù)據(jù)庫,MTS,Web Server比起來,它更像是一個(gè)概念,一種方法
-項(xiàng)目越大,它的發(fā)揮余地越大,作用越大。
-一旦真正理解后,哪怕不用xml parser,也不妨礙你使用這個(gè)概念,如同可以拋開特定語言使用OO。
- ......
?
XML的作用
作為一種通用的數(shù)據(jù)表示方法,用于數(shù)據(jù)的傳輸和存儲(chǔ)
xml有全套的操作這種結(jié)構(gòu)的方法
?????? XSD,XSL,解析器,Xquery:數(shù)據(jù)查詢(及語句)
定義派生標(biāo)簽語言:怎么定義,給出檢驗(yàn)方法嗎?另外就是怎么學(xué)習(xí)xml的派生語言。
?
XML語法:
實(shí)例:
<?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>
所有 XML 元素都須有關(guān)閉標(biāo)簽
XML 標(biāo)簽對大小寫敏感
XML 文檔必須有根元素
XML 的屬性值須加引號(hào)
?
層級(jí)結(jié)構(gòu):數(shù)據(jù)的種類可以參考json,無非是數(shù)組和對象,同樣可以用編譯原理中的遞歸定義來定義xml。在xml中,用標(biāo)簽名相同的兄弟元素表示數(shù)組,用標(biāo)簽名不同的兄弟元素表示對象的成員,從而表示了對象。
Xml元素的標(biāo)簽名表示對象的類型(描述這個(gè)對象是什么)
XML 元素 vs. 屬性
<person sex="female">
? <firstname>Anna</firstname>
? <lastname>Smith</lastname>
</person>
?
<person>
? <sex>female</sex>
? <firstname>Anna</firstname>
? <lastname>Smith</lastname>
</person>
沒有什么規(guī)矩可以告訴我們什么時(shí)候該使用屬性,而什么時(shí)候該使用子元素。我的經(jīng)驗(yàn)是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應(yīng)該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請使用子元素吧。
因使用屬性而引起的一些問題:
屬性無法包含多重的值(元素可以)
屬性無法描述樹結(jié)構(gòu)(元素可以)
屬性不易擴(kuò)展(為未來的變化)
屬性難以閱讀和維護(hù)
元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲(chǔ)為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲(chǔ)為元素。
常用屬性:id,name,xmlns
--------------------------------------------xml“高級(jí)”語法------------------------------------------------------
命名空間:它的作用是防止命名沖突,可想而知,在日常的數(shù)據(jù)表示中用得不多。但在一些通用的語言定義中會(huì)用到,如xsl。
<h:table xmlns:h="http://www.w3.org/TR/html4/">
?? <h:tr>
?? <h:td>Apples</h:td>
?? <h:td>Bananas</h:td>
?? </h:tr>
</h:table>
在某個(gè)標(biāo)簽塊中用屬性xmlns聲明命名空間,如<h:table xmlns:h="http://www.w3.org/TR/html4/">,則在整個(gè)塊中都可以使用該命名空間。聲明的內(nèi)容是指向一個(gè)描述該命名空間的URL。
CDATA:在一個(gè)塊內(nèi),用<![CDATA[ ……]]>把內(nèi)容包住,使在該塊中可以不用xml實(shí)體??梢娺@個(gè)東西不太常用,主要在定義的語言中可能用到。
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
? {
? return 1;
? }
else
? {
? return 0;
? }
}
]]>
</script>
?XML 聲明:如<?xml version="1.0" encoding="ISO-8859-1"?>,它不滿足xml語法,不屬于xml的部分。
編碼屬性(encoding)應(yīng)當(dāng)被指定為文檔被保存時(shí)所使用的編碼。我最好的避免錯(cuò)誤的建議是:
使用支持編碼的編輯器
確定編輯器使用的編碼
在您的 XML 文檔中使用相同的編碼屬性
?
Xml驗(yàn)證
合法的 XML 文檔是“形式良好”(符合一般的xml語法規(guī)則)的 XML 文檔,同樣遵守文檔類型定義 (DTD) 的語法規(guī)則:
***Note.xml
<?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>?
***Note.dtd
<!DOCTYPE note [
? <!ELEMENT note (to,from,heading,body)>
? <!ELEMENT to????? (#PCDATA)>
? <!ELEMENT from??? (#PCDATA)>
? <!ELEMENT heading (#PCDATA)>
? <!ELEMENT body??? (#PCDATA)>
]>
W3C 支持一種DTD代替者,它名為XML Schema,它的語法基于XML
<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也能在瀏覽器中顯示(放在鏈接里),可見這個(gè)主題并不常用。
但是顯示方案有一定的瀏覽器差異性,當(dāng)xml有語法錯(cuò)誤時(shí),瀏覽器還會(huì)報(bào)錯(cuò)
解決方案1:用css定制樣式
***cd.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
</CATALOG>
***cd_catalog.css
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
font-size: 20pt;
}
ARTIST
{
color: #0000FF;
font-size: 20pt;
}
COUNTRY,PRICE,YEAR,COMPANY
{
display: block;
color: #000000;
margin-left: 20pt;
}
很容易看懂,本來就有自定義的html標(biāo)簽
?????? CSS 格式化 XML 不是常用的方法,更不能代表 XML 文檔樣式化的未來。W3C 推薦使用 XSLT。
解決方案2:XSLT, 是首選的 XML 樣式表語言。
***breakfast.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="simple.xsl"?>
<breakfast_menu>
? <food>
??? <name>Belgian Waffles</name>
??? <price>$5.95</price>
??? <description>
?????? two of our famous Belgian Waffles
??? </description>
??? <calories>650</calories>
? </food>
</breakfast_menu>
***simple.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
? <body style="font-family:Arial,helvetica,sans-serif;font-size:12pt;
??????? background-color:#EEEEEE">
??? <xsl:for-each select="breakfast_menu/food">
????? <div style="background-color:teal;color:white;padding:4px">
??????? <span style="font-weight:bold;color:white">
??????? <xsl:value-of select="name"/></span>
??????? - <xsl:value-of select="price"/>
????? </div>
????? <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
??????? <xsl:value-of select="description"/>
??????? <span style="font-style:italic">
????????? (<xsl:value-of select="calories"/> calories per serving)
??????? </span>
???? ?</div>
??? </xsl:for-each>
? </body>
</html>
用過html模板后就覺得這不難看懂,主要是一些標(biāo)簽替換
XSLT 的原理是是在瀏覽器顯示 XML 文件之前,先把它轉(zhuǎn)換為 HTML。由于XSLT 轉(zhuǎn)換是由瀏覽器完成的,所以減少了瀏覽器差異性問題。
?
xml轉(zhuǎn)化為html
相關(guān)的xslt庫
先轉(zhuǎn)化為dom對象,再用程序完成
?
xml解析器
xml解析器會(huì)把把XML(文件或字符串)轉(zhuǎn)換為XML DOM對象
什么是dom對象,怎么轉(zhuǎn)換,看看js就知道了。
xml文檔的讀取有跨域問題
?
php與xml
php通過header("Content-type:text/xml");可以用echo向?yàn)g覽器發(fā)送xml。
要用程序把數(shù)據(jù)庫數(shù)據(jù)轉(zhuǎn)換成xml,要自己寫一些代碼
?
工具
Xml驗(yàn)證器:http://www.w3school.com.cn/xml/xml_validator.asp
?
概念
XML 聲明:如<?xml version="1.0" encoding="ISO-8859-1"?>
CDATA:在一個(gè)塊內(nèi),用<![CDATA[ ……]]>把內(nèi)容包住,使在該塊中可以不用xml實(shí)體。
DTD:文檔類型定義 (document type definition)
XSD(XML Schema Definition):即XML Schema ,是W3C 支持一種DTD代替者,它的語法基于XML 。
XSL :指擴(kuò)展樣式表語言(EXtensible?Stylesheet?Language),它的初衷是給xml提供樣式顯示。由XSLT、XPath 以及 XSL-FO組成。XSLT的主旨更一般化,指可將一種 XML 文檔轉(zhuǎn)換為另外一種 XML 文檔。口頭中,常把XSLT稱為XLS。
XSLT:指 XSL 轉(zhuǎn)換(XSL Transformations),?可將一種 XML 文檔轉(zhuǎn)換為另外一種 XML 文檔,其中一種特例是把XML轉(zhuǎn)換成HTML輸出。
Xpath:Xpath是一門在 XML 文檔中查找信息的語言,在 XML 文檔中通過元素和屬性進(jìn)行導(dǎo)航。?XSLT使用 XPath 在 XML 文檔中進(jìn)行導(dǎo)航,在XSLT中,除開導(dǎo)航,就只剩下怎么替換的問題了。
Xquery:一種xml的查詢語言,Xquery之于xml就像sql之于數(shù)據(jù)庫。XQuery是基于XPath上的,單獨(dú)的 XPath 位置路徑本身就是有效的 Xquery。
?
參考文章
w3c:http://www.w3school.com.cn/xml/xml_syntax.asp
XML入門之十一問答
http://developer.51cto.com/art/200512/15385.htm
通過PHP操作XML入門
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/0421/2884.html
XML是什么,它可以做什么?——寫給XML入門者 :
http://blog.csdn.net/cds27/article/details/743409
XML是什么,它可以做什么:http://blog.sina.com.cn/s/blog_5c012cc00100cehm.html
給xml的初學(xué)者
http://www.why.com.cn/epublish/node625/node1202/node1209/userobject7ai12694.html
相關(guān)技術(shù)http://www.w3school.com.cn/xml/xml_technologies.asp
轉(zhuǎn)載于:https://www.cnblogs.com/deliver/p/3300634.html
總結(jié)
以上是生活随笔為你收集整理的xml入门简介--两天学会xml的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URAL 1152. False Mir
- 下一篇: svmtest