Hướng dẫn XML

TRANG CHỦ XML Giới thiệu XML Cách sử dụng XML Cây XML Cú pháp XML Phần tử XML Thuộc tính XML Không gian tên XML Hiển thị XML HttpRequest XML Trình phân tích cú pháp XML DOM XML XPath XML XSLT XML XQuery XML XML XLink Trình xác thực XML DTD XML Lược đồ XML Máy chủ XML Ví dụ về XML Câu đố XML Chứng chỉ XML

XML AJAX

Giới thiệu AJAX AJAX XMLHttp Yêu cầu AJAX Phản hồi AJAX Tệp XML AJAX AJAX PHP AJAX ASP Cơ sở dữ liệu AJAX Ứng dụng AJAX Ví dụ về AJAX

DOM XML

Giới thiệu DOM Nút DOM Truy cập DOM Thông tin nút DOM Danh sách nút DOM DOM Traversing Điều hướng DOM DOM Nhận giá trị Nút thay đổi DOM DOM Xóa các nút Nút thay thế DOM DOM Tạo nút DOM Thêm nút Nút nhân bản DOM Ví dụ về DOM

Hướng dẫn XPath

Giới thiệu XPath Nút XPath Cú pháp XPath Trục XPath Toán tử XPath Ví dụ về XPath

Hướng dẫn XSLT

Giới thiệu XSLT Ngôn ngữ XSL Chuyển đổi XSLT XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sắp xếp> XSLT <if> XSLT <chọn> Áp dụng XSLT XSLT trên máy khách XSLT trên Máy chủ XSLT Chỉnh sửa XML Ví dụ về XSLT

Hướng dẫn XQuery

Giới thiệu XQuery Ví dụ về XQuery XQuery FLWOR HTML XQuery Điều khoản XQuery Cú pháp XQuery XQuery Thêm Chọn XQuery Hàm XQuery

DTD XML

Giới thiệu DTD Khối xây dựng DTD Phần tử DTD Các thuộc tính DTD Phần tử DTD so với Attr Thực thể DTD Ví dụ về DTD

Lược đồ XSD

Giới thiệu XSD XSD Cách thực hiện XSD <schema> Phần tử XSD Thuộc tính XSD Hạn chế XSD

XSD Complex

Phần tử XSD XSD trống Chỉ các phần tử XSD Chỉ văn bản XSD XSD hỗn hợp Chỉ báo XSD XSD <nhiều> XSD <anyAttribute> Thay thế XSD Ví dụ về XSD

Dữ liệu XSD

Chuỗi XSD Ngày XSD XSD Numeric XSD Misc Tham chiếu XSD

Dịch vụ web

Dịch vụ XML WSDL XML SOAP XML RDF XML RSS XML

Người giới thiệu

Các loại nút DOM Nút DOM DOM NodeList DOM NamedNodeMap Tài liệu DOM Phần tử DOM Thuộc tính DOM Văn bản DOM DOM CDATA Bình luận DOM DOM XMLHttpRequest Trình phân tích cú pháp DOM Phần tử XSLT Hàm XSLT / XPath

Cây nút giao dịch XML DOM


Đi ngang có nghĩa là đi vòng qua hoặc đi qua cây nút.


Duyệt qua cây nút

Thông thường, bạn muốn lặp lại một tài liệu XML, ví dụ: khi bạn muốn trích xuất giá trị của mỗi phần tử.

Điều này được gọi là "Duyệt qua cây nút"

Ví dụ dưới đây lặp qua tất cả các nút con của <book> và hiển thị tên và giá trị của chúng:

Thí dụ

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

// documentElement always represents the root node
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length ;i++) {
    txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

Đầu ra:

title: Everyday Italian
author: Giada De Laurentiis
year: 2005

Ví dụ được giải thích:

  1. Tải chuỗi XML vào xmlDoc
  2. Lấy các nút con của phần tử gốc
  3. Đối với mỗi nút con, xuất tên nút và giá trị nút của nút văn bản


Sự khác biệt của trình duyệt trong phân tích cú pháp DOM

Tất cả các trình duyệt hiện đại đều hỗ trợ đặc tả W3C DOM.

Tuy nhiên, có một số khác biệt giữa các trình duyệt. Một điểm khác biệt quan trọng là:

  • Cách họ xử lý khoảng trắng và các đường mới

DOM - Khoảng trắng và dòng mới

XML thường chứa các ký tự dòng mới hoặc khoảng trắng giữa các nút. Điều này thường xảy ra khi tài liệu được chỉnh sửa bởi một trình soạn thảo đơn giản như Notepad.

Ví dụ sau (do Notepad chỉnh sửa) chứa CR / LF (dòng mới) giữa mỗi dòng và hai dấu cách ở phía trước mỗi nút con:

<book>
  <title>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

Internet Explorer 9 trở về trước KHÔNG coi khoảng trắng trống hoặc dòng mới là nút văn bản, trong khi các trình duyệt khác thì có.

Ví dụ sau sẽ xuất ra số lượng nút con mà phần tử gốc (của books.xml ) có. IE9 trở về trước sẽ xuất ra 4 nút con, trong khi IE10 và các phiên bản mới hơn và các trình duyệt khác sẽ xuất ra 9 nút con:

Thí dụ

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    x = xmlDoc.documentElement.childNodes;
    document.getElementById("demo").innerHTML =
    "Number of child nodes: " + x.length;
}

PCDATA - Dữ liệu ký tự được phân tích cú pháp

Các trình phân tích cú pháp XML thường phân tích cú pháp tất cả văn bản trong một tài liệu XML.

Khi một phần tử XML được phân tích cú pháp, văn bản giữa các thẻ XML cũng được phân tích cú pháp:

<message>This text is also parsed</message>

Trình phân tích cú pháp thực hiện điều này vì các phần tử XML có thể chứa các phần tử khác, như trong ví dụ này, trong đó phần tử <name> chứa hai phần tử khác (đầu tiên và cuối cùng):

<name><first>Bill</first><last>Gates</last></name>

và trình phân tích cú pháp sẽ chia nó thành các phần tử con như sau:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

Dữ liệu ký tự được phân tích cú pháp (PCDATA) là một thuật ngữ được sử dụng về dữ liệu văn bản sẽ được phân tích cú pháp bởi trình phân tích cú pháp XML.


CDATA - Dữ liệu ký tự (Chưa phân tích)

Thuật ngữ CDATA được sử dụng về dữ liệu văn bản không được phân tích cú pháp bởi trình phân tích cú pháp XML.

Các ký tự như "<" và "&" là bất hợp pháp trong các phần tử XML.

"<" sẽ tạo ra lỗi vì trình phân tích cú pháp diễn giải nó là phần bắt đầu của một phần tử mới.

"&" sẽ tạo ra lỗi vì trình phân tích cú pháp hiểu nó là phần bắt đầu của một thực thể ký tự.

Một số văn bản, như mã JavaScript, chứa rất nhiều ký tự "<" hoặc "&". Để tránh lỗi, mã script có thể được định nghĩa là CDATA.

Mọi thứ bên trong phần CDATA đều bị trình phân tích cú pháp bỏ qua.

Phần CDATA bắt đầu bằng " <! [CDATA [ " và kết thúc bằng " ]]> ":

<script>
<![CDATA[
function matchwo(a,b) {
    if (a < b && a < 0) {
        return 1;
    } else {
        return 0;
    }
}
]]>
</script>

Trong ví dụ trên, mọi thứ bên trong phần CDATA đều bị trình phân tích cú pháp bỏ qua.

Ghi chú về các phần CDATA:

Phần CDATA không được chứa chuỗi "]]>". Các phần CDATA lồng nhau không được phép.

Dấu "]]>" đánh dấu phần cuối của phần CDATA không được chứa dấu cách hoặc dấu ngắt dòng.