所有主要的瀏覽器都內置了一個XML解析器,用於訪問和操作XML XML 解析器 在訪問XML文檔之前,必須將其載入到XML DOM對象中 所有現代瀏覽器都有一個內置的XML解析器,可以將文本轉換為XML DOM對象 解析文本字元串 以下示例將一個文本字元串解析為XML DOM對象,並使用JavaSc ...
所有主要的瀏覽器都內置了一個XML解析器,用於訪問和操作XML
XML 解析器
在訪問XML文檔之前,必須將其載入到XML DOM對象中
所有現代瀏覽器都有一個內置的XML解析器,可以將文本轉換為XML DOM對象
解析文本字元串
以下示例將一個文本字元串解析為XML DOM對象,並使用JavaScript從中提取信息:
示例
<html>
<body>
<p id="demo"></p>
<script>
var text, parser, xmlDoc;
text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
示例解釋
定義了一個文本字元串:
text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";
創建了一個XML DOM解析器:
parser = new DOMParser();
解析器使用文本字元串創建一個新的XML DOM對象:
xmlDoc = parser.parseFromString(text, "text/xml");
XMLHttpRequest 對象
responseText 屬性以字元串形式返迴響應。
responseXML 屬性以XML DOM對象的形式返迴響應。
如果要將響應作為XML DOM對象使用,可以使用responseXML屬性。
示例
xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
XML DOM
DOM 是什麼?
文檔對象模型(DOM)定義了一種標準,用於訪問和操作文檔
HTML DOM 定義了一種訪問和操作HTML文檔的標準方式。它將HTML文檔呈現為一棵樹結構。
XML DOM 定義了一種訪問和操作XML文檔的標準方式。它將XML文檔呈現為一棵樹結構。
瞭解DOM對於任何與HTML或XML相關的工作都是必要的。
HTML DOM
所有HTML元素都可以通過HTML DOM訪問。
以下示例更改具有id="demo"的HTML元素的值:
示例
<h1 id="demo">This is a Heading</h1>
<button type="button"
onclick="document.getElementById('demo').innerHTML = 'Hello World!'">Click Me!
</button>
XML DOM
所有XML元素都可以通過XML DOM訪問
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
以下代碼檢索XML文檔中第一個 <title>
元素的文本值:
示例
txt = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
XML DOM 是獲取、更改、添加和刪除XML元素的標準方式。
以下示例將一個文本字元串載入到XML DOM對象中,並使用JavaScript從中提取信息:
示例
<html>
<body>
<p id="demo"></p>
<script>
var text, parser, xmlDoc;
text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";
parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
XML 和 XPath
什麼是 XPath?
XPath 是 XSLT 標準中的一個主要元素。它可用於瀏覽 XML 文檔中的元素和屬性。
- XPath 是定義 XML 文檔部分的語法。
- XPath 使用路徑表達式在 XML 文檔中導航。
- XPath 包含標準函數庫。
- XPath 是 XSLT 和 XQuery 中的主要元素
XPath 路徑表達式
XPath 使用路徑表達式選擇 XML 文檔中的節點或節點集。這些路徑表達式類似於在傳統電腦文件系統中使用的表達式。
XPath 表達式可用於 JavaScript、Java、XML Schema、PHP、Python、C 和 C++ 等許多其他語言。
XPath 用於 XSLT
XPath 是 XSLT 標準中的一個主要元素。具備 XPath 知識將使您能夠充分利用 XSL。
XPath 示例
我們將使用以下 XML 文檔:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<!-- 其他書籍內容省略 -->
</bookstore>
在下表中,我們列出了一些 XPath 表達式及其結果:
XPath 表達式 | 結果 |
---|---|
/bookstore/book[1] |
選擇 bookstore 元素的第一個子元素 book 元素 |
/bookstore/book[last()] |
選擇 bookstore 元素的最後一個子元素 book 元素 |
/bookstore/book[last()-1] |
選擇 bookstore 元素的倒數第二個子元素 book 元素 |
/bookstore/book[position()<3] |
選擇 bookstore 元素的前兩個子元素 book 元素 |
//title[@lang] |
選擇所有具有名為 lang 的屬性的 title 元素 |
//title[@lang='en'] |
選擇所有具有值為 "en" 的 "lang" 屬性的 title 元素 |
/bookstore/book[price>35.00] |
選擇 bookstore 元素中所有具有價格大於 35.00 的 book 元素 |
/bookstore/book[price>35.00]/title |
選擇 bookstore 元素中所有具有價格大於 35.00 的 book 元素的 title 元素 |
XML 和 XQuery
什麼是 XQuery?
XQuery 是 XML 的查詢語言,類似於 SQL 對資料庫的作用。XQuery 的設計目標是查詢 XML 數據。
XQuery 示例
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
- XQuery 是一種從 XML 文檔中查找和提取元素和屬性的語言。
- 示例問題:"從存儲在 cd_catalog.xml 中的 CD 集合中選擇所有價格低於 $10 的 CD 記錄"
XQuery 和 XPath
XQuery 1.0 和 XPath 2.0 共用相同的數據模型,並支持相同的函數和運算符。如果您已經學習過 XPath,那麼理解 XQuery 將沒有問題。
XQuery 使用示例
XQuery 可以用於:
- 提取用於 Web 服務的信息
- 生成摘要報告
- 將 XML 數據轉換為 XHTML
- 在 Web 文檔中搜索相關信息
XML、XLink 和 XPointer
XLink
- XLink 用於在 XML 文檔中創建超鏈接。
- 在 XML 文檔中,沒有瀏覽器支持 XLink。但是 XLink 在其他 XML 語言中使用。
- XLink 語法允許使用任何元素名稱作為鏈接元素。
XLink 示例
<?xml version="1.0" encoding="UTF-8"?>
- xlink:type="simple" 創建一個簡單的 "類似 HTML" 鏈接。
- xlink:href 屬性指定要鏈接到的 URL。
XLink 示例解釋
- 在文檔頂部聲明瞭 XLink 命名空間(xmlns:xlink="http://www.w3.org/1999/xlink")。
- xlink:type="simple" 創建一個簡單的 "類似 HTML" 鏈接。
- xlink:href 屬性指定鏈接到的 URL(在這種情況下是圖像)。
- xlink:show="new" 指定鏈接應在新視窗中打開。
XLink - 進一步瞭解
- 在上面的示例中,我們演示了簡單的 XLink。
- 當訪問遠程位置作為資源時,XLink 變得更有趣。
XPointer
- XPointer 允許鏈接指向 XML 文檔的特定部分。
- 使用 XPath 表達式在 XML 文檔中導航
XPointer 示例
在 XLink 與 XPointer 結合使用的示例中,我們鏈接到另一個文檔的特定部分。
首先,查看目標 XML 文檔,該文檔在每個元素上使用 id 屬性:
<?xml version="1.0" encoding="UTF-8"?>
<dogbreeds>
<dog breed="Rottweiler" id="Rottweiler">
<picture url="https://dog.com/rottweiler.gif" />
<history>The Rottweiler's ancestors were probably Roman drover dogs.....</history>
<temperament>Confident, bold, alert and imposing, the Rottweiler is a popular choice for its ability to protect....</temperament>
</dog>
<dog breed="FCRetriever" id="FCRetriever">
<picture url="https://dog.com/fcretriever.gif" />
<history>One of the earliest uses of retrieving dogs was to help fishermen retrieve fish from the water....</history>
<temperament>The flat-coated retriever is a sweet, exuberant, lively dog that loves to play and retrieve....</temperament>
</dog>
</dogbreeds>
在 XPointer 中,我們可以鏈接到文檔中具有特定 id 的元素:
<fact xlink:type="simple" xlink:href="https://dog.com/dogbreeds.xml#Rottweiler">Fact about Rottweiler</fact>
這裡,我們使用 id 值 "Rottweiler"。
這種鏈接方法可用於指向文檔中的特定部分。
XML驗證器
使用我們的XML驗證器來檢查您的XML語法。
格式良好的XML文檔
具有正確語法的XML文檔稱為“格式良好”。以下是一份示例:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML的語法規則包括:
- XML文檔必須有根元素
- XML元素必須有關閉標簽
- XML標簽區分大小寫
- XML元素必須正確嵌套
- XML屬性值必須用引號括起來
XML錯誤將阻止您
XML文檔中的錯誤將阻止您的XML應用程式
HTML瀏覽器允許顯示帶有錯誤的HTML文檔,但對於XML,不允許存在錯誤。
檢查XML語法
為了幫助您檢查XML語法,我們創建了一個XML驗證器。
嘗試檢查正確的XML
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
嘗試檢查不正確的XML
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</pheading>
<body>Don't forget me this weekend!</body>
</note>
有效的XML文檔
“格式良好”的XML文檔與“有效”的XML文檔不同。“有效”的XML文檔必須是格式良好的,並符合文檔類型定義(DTD或XML模式)。
文檔類型定義定義了XML文檔的規則以及合法的元素和屬性。
XML DTD
具有正確語法的XML文檔稱為“格式良好”。
通過DTD驗證的XML文檔既是“格式良好”又是“有效”的。
什麼是DTD?
DTD代表文檔類型定義。
DTD定義了XML文檔的結構以及合法的元素和屬性。
有效的XML文檔
一個“有效”的XML文檔既是“格式良好”的,也符合DTD的規則:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的DOCTYPE聲明包含對DTD文件的引用。DTD文件的內容如下所示,併進行瞭解釋。
XML DTD
DTD的目的是定義XML文檔的結構以及合法的元素和屬性
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
上述DTD的解釋如下
<!DOCTYPE note
- 定義文檔的根元素為note
<!ELEMENT note
- 定義note
元素必須包含元素:“to, from, heading, body”<!ELEMENT to
- 定義to
元素的類型為“#PCDATA”<!ELEMENT from
- 定義from
元素的類型為“#PCDATA”<!ELEMENT heading
- 定義heading
元素的類型為“#PCDATA”<!ELEMENT body
- 定義body
元素的類型為“#PCDATA”
提示:#PCDATA
表示可解析的字元數據
使用DTD進行實體聲明
DOCTYPE聲明還可用於定義文檔中使用的特殊字元或字元串
例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY nbsp " ">
<!ENTITY writer "Writer: Donald Duck.">
<!ENTITY copyright "Copyright: W3Schools.">
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<footer>&writer; ©right;</footer>
</note>
提示:實體由三部分組成:以“&”開始,然後是實體名稱,最後以分號結束
何時使用DTD?
使用DTD,獨立的人群可以同意使用標準的DTD進行數據交換
使用DTD,您可以驗證從外部世界接收到的數據是否有效
您還可以使用DTD驗證自己的數據
何時不使用DTD?
XML不需要DTD
當您嘗試使用XML進行實驗,或者當您處理小型XML文件時,創建DTD可能是浪費時間的
如果您開發應用程式,請等到規範穩定後再添加DTD。否則,由於驗證錯誤,您的軟體可能會停止工作
XML Schema
具有正確語法的XML文檔稱為“格式良好”
通過XML Schema驗證的XML文檔既是“格式良好”又是“有效”的
XML Schema
XML Schema是DTD的基於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>
上述Schema的解釋如下
<xs:element name="note">
定義名為“note”的元素<xs:complexType>
“note”元素是一個複雜類型<xs:sequence>
複雜類型是一系列元素<xs:element name="to" type="xs:string">
“to”元素的類型為字元串(文本)<xs:element name="from" type="xs:string">
“from”元素的類型為字元串<xs:element name="heading" type="xs:string">
“heading”元素的類型為字元串<xs:element name="body" type="xs:string">
“body”元素的類型為字元串
XML Schema比DTD更強大
- XML Schema是用XML編寫的
- XML Schema可擴展以添加內容
- XML Schema支持數據類型
- XML Schema支持命名空間
為什麼使用XML Schema?
使用XML Schema,您的XML文件可以攜帶其自身格式的描述。
使用XML Schema,獨立的人群可以就數據交換達成標準協議。
使用XML Schema,您可以驗證數據。
XML Schema支持數據類型
XML Schema的最大優勢之一是支持數據類型
- 更容易描述文檔內容
- 更容易定義對數據的限制
- 更容易驗證數據的正確性
- 更容易在不同數據類型之間轉換數據
XML Schema使用XML語法
XML Schema的另一個重要優勢是它們是用XML編寫的
- 您不必學習一種新語言
- 您可以使用XML DOM操作Schema
- 您可以使用XSLT轉換Schema
在伺服器上使用XSLT轉換XML
此ASP將伺服器上的XML文件轉換為XHTML
<%
'載入XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("simple.xml"))
'載入XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("simple.xsl"))
'轉換文件
Response.Write(xml.transformNode(xsl))
%>
例子解釋
- 代碼的第一個塊創建Microsoft XML解析器(XMLDOM)的實例,並將XML文件載入到記憶體中。
- 代碼的第二個塊創建解析器的另一個實例,並將XSL文件載入到記憶體中。
- 代碼的最後一行使用XSL文檔轉換XML文檔,並將結果作為XHTML發送到瀏覽器。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註