Trong bài này, hãy tìm hiểu về các khái niệm sau:
- Cách sử dụng Xpath.
- Viết các biểu thức XPath cơ bản.
- Sử dụng chức năng XPath của thư viện XML của PHP.
- Sử dụng XPath và PHP để chuyển đổi các định dạng dữ liệu.
Bài này có một số ví dụ hoạt động bằng cách sử dụng XPath với PHP mà bạn có thể thực hành, với giả định rằng bạn đã có những kỹ năng tiên quyết được mô tả trong phần Các điều kiện cần có trước.
Để học được nhiều nhất từ bài này, bạn cần có kiến thức về XML và PHP5 cùng với việc cấu hình và cài đặt các phần mở rộng PHP. Ngoài ra, bạn cần truy cập và cần có kiến thức làm việc với một hệ điều hành dựa trên-UNIX® hay Microsoft® Windows® với một máy chủ web hỗ trợ PHP5 mà trên đó bạn có thể thực hành các ví dụ mã được trình bày trong bài này.
Khi web hướng nhiều hơn đến tầm nhìn ban đầu của web ngữ nghĩa, các ứng dụng trở nên tương tác nhiều hơn với nhau. Các công nghệ như SOAP, REST, RSS, RDF và các công nghệ khác là những hỗ trợ mạnh mẽ cho web tương lai. Với phần lớn trường hợp, XML là định dạng thông báo được chọn để mô tả dữ liệu liên quan. Bạn có thể sử dụng JSON đến một mức độ nào đó, nhưng bạn sẽ có thể nhận thấy XML là phương pháp chủ yếu để trao đổi dữ liệu.
Hoặc, bạn có thể gặp phải nhiệm vụ chuyển đổi dữ liệu XML sang XHTML để cung cấp một giao diện hấp dẫn, tương tác và dễ sử dụng cho những người dùng di động và các trình duyệt web khác nhau.
Việc lưu trữ dữ liệu là các tài liệu XML vào một hệ thống tệp hoặc một cơ sở dữ liệu phù hợp với XML cũng là một cách phổ biến để lưu trữ dữ liệu để sau này lấy ra cho các nhiệm vụ như tạo báo cáo, hiển thị giao diện người dùng, hoặc làm việc với tích hợp ứng dụng.
Khi làm việc với dữ liệu XML, bạn cần phân tích cú pháp dữ liệu để nhận được một mẫu thức chung nhỏ nhất — đó là dữ liệu mong muốn (hoặc giá trị nút nguyên tử, như người ta thường gọi nó). XSLT là một tiêu chuẩn W3C thực hiện chuyển đổi XML sang một định dạng khác như HTML, PDF, hoặc thậm chí tài liệu XML khác có sử dụng một lược đồ khác. Nó dựa rất nhiều vào việc sử dụng XPath, cũng giống như là XQuery, XForms và XPointer.
Ở dạng đơn giản nhất của mình, XPath là một ngôn ngữ dùng để dẫn hướng trong một cây XML trong bộ nhớ. Ban đầu, XPath được thiết kế như là một ngôn ngữ cho XSLT và XPointer. XPath 1.0 đã trở thành một tiêu chuẩn W3C vào năm 1999. XPath 2.0 phổ biến hiện nay đã được công nhận là một đặc tả vào năm 2007.
Khi các đặc tả khác về XML mới nổi lên, việc sử dụng XPath cũng vậy. Hiện nay, XPath là ngôn ngữ được ưa chuộng để dẫn hướng XML trong các lược đồ XML, ISO Schematron, XQuery và XForms. Trớ trêu thay, nhưng với lý do chính đáng, XPath không được dựa trên cú pháp XML. Nó sử dụng cú pháp riêng của mình để tránh va chạm với các URI và cú pháp XML khác có liên quan.
Khi bạn làm việc với XPath trong PHP, chỉ cần nhớ rằng bạn không sử dụng XPath một mình. Bạn sử dụng nó như một công cụ để dẫn hướng XML trong bộ nhớ trong khi làm việc với một trong các đặc tả XML khác.
Với mục đích của bài này, tôi sử dụng đặc tả XPath 1.0 là bản được dùng rộng rãi nhất, trong các thảo luận và các ví dụ. XPath 2.0 tương thích lùi với XPath 1.0, nhưng hiện nay PHP mới hỗ trợ hạn chế cho XPath 2.0.
Đặc tả XPath cung cấp mô tả chi tiết về thuật ngữ và việc sử dụng tiêu chuẩn của nó. Nếu bạn lường trước việc sử dụng phức tạp của XPath với PHP, thì đặc tả này là một điểm tin cậy để tham khảo. Mặt khác, có thể tóm tắt đặc tả XPath thành bốn lĩnh vực quan tâm chính, như mô tả trong Bảng 1.
Bảng 1. Bốn lĩnh vực chính của đặc tả XPath
| Lĩnh vực | Mô tả | Các ví dụ |
|---|---|---|
| Các đường dẫn vị trí | Gồm có các bước vị trí, các trục, các biến vị ngữ và cú pháp viết tắt. | parent::node, child::text(), attribute::*, /PRODUCTS/PRODUCT[3]/NAME |
| Mô hình dữ liệu | Mô tả XML như là một cây. Có các nút gốc, các thuộc tính, văn bản, các vùng tên, các phần tử, các chỉ thị xử lý và các chú thích. | /, /ns1:PRODUCTS/ns1:PRODUCT, @category |
| Các biểu thức | Có thể chứa các tham chiếu biến, các hàm, các giá trị Bool, các số, các chuỗi ký tự và các biến vị ngữ. | /PRODUCTS/PRODUCT/NAME[string-length( ) > 15]/../@category |
| Các hàm | XPath 1.0 có 27 hàm dựng sẵn được phân loại như là các hàm thiết lập nút, chuỗi ký tự, Boolean, hoặc các hàm số. | string-length(), true(), sum() |
Trước khi viết mã PHP, hãy dành thời gian để xem xét các nút, các đường dẫn và các hàm XPath. Tệp products.xml trong Liệt kê 1 đưa ra các ví dụ của một số biểu thức thường được sử dụng để xác định vị trí dữ liệu trong một đường dẫn XML dựa trên các biến vị ngữ, xác định vị trí các giá trị nguyên tử của các nút và sử dụng các hàm.
Liệt kê 1. Một tài liệu XML mẫu của các sản phẩm (products.xml)
<?xml version="1.0" encoding="UTF-8"?>
<PRODUCTS>
<PRODUCT category="software">
<SKU>soft32323</SKU>
<SUB_CATEGORY>Business Analysis</SUB_CATEGORY>
<NAME>Widget Reporting</NAME>
<PRICE>4500</PRICE>
</PRODUCT>
<PRODUCT category="software">
<SKU>soft32323</SKU>
<SUB_CATEGORY>Business Analysis</SUB_CATEGORY>
<NAME>Pro Reporting</NAME>
<PRICE>2300</PRICE>
</PRODUCT>
<PRODUCT category="storage">
<SKU>soft32323</SKU>
<SUB_CATEGORY>Tape Systems</SUB_CATEGORY>
<NAME>Tapes Abound</NAME>
<PRICE>2300</PRICE>
</PRODUCT>
<PRODUCT category="storage">
<SKU>soft32323</SKU>
<SUB_CATEGORY>Disk Systems</SUB_CATEGORY>
<NAME>Widget100 Series</NAME>
<PRICE>6500</PRICE>
</PRODUCT>
</PRODUCTS>
|
/PRODUCTS trả về tất cả các nút là con của nút
PRODUCTS, trong đó có bốn nút. Hãy chú ý đến
biểu tượng dấu gạch chéo thuận (/). Nếu bạn đã
quen thuộc với các hệ điều hành dựa trên UNIX, bạn biết rằng dấu gạch chéo
thuận biểu diễn đường dẫn tuyệt đối. Như trong các đường dẫn tệp UNIX, bạn
có thể sử dụng một đường dẫn tuyệt đối khi có nghi ngờ về vị trí ngữ cảnh
hiện tại của bạn. Với tài liệu trong Liệt kê 1,
PRODUCTS là nút gốc.
Đường dẫn tương đối cũng làm việc với XPath. Khi bạn sử dụng
.. trong một biểu thức, nó chỉ thị cho biểu
thức này tiến lên một mức từ nút hiện tại trong hệ thống phân cấp (cũng
lại tương tự như làm việc với các thư mục trong các hệ điều hành UNIX). Ví
dụ, ../PRODUCT/SKU trả về giá trị nút nguyên tử
cho tất cả bốn số SKU gắn liền với mỗi nút
PRODUCT.
Việc chọn một nút thuộc tính đòi hỏi cú pháp đặc biệt trong XPath. Nếu bạn
muốn trả về tất cả các nút PRODUCT được liệt kê
trong thể loại phần mềm, biểu thức
/PRODUCTS/PRODUCT[@category='software'] làm
đúng việc đó. Trong biểu thức này, category
(thể loại) được coi là một thuộc tính trong tài liệu XML. XPath có thể
chọn các thuộc tính bằng ký hiệu @. Một cách khác thay thế là bạn có thể
chọn một thuộc tính bằng cách sử dụng cú pháp
/PRODUCTS/PRODUCT[attribute::category='software'].
Hầu hết mọi người cho rằng ký hiệu @ sẽ ngắn gọn và dễ sử dụng hơn.
Để chọn các giá trị nút nguyên tử (có nghĩa là, giá trị văn bản thực tế)
của tất cả các tên sản phẩm cho các sản phẩm trị giá hơn $ 2.500, bạn có
thể viết biểu thức là
/PRODUCTS/PRODUCT[PRICE > 2500]/NAME. Khi
được thi hành, biểu thức này trả về các tên sản phẩm là
Widget Reporting và
Widget100
Series.
Hãy xem một ví dụ biểu thức cuối cùng trước khi chuyển sang sử dụng XPath
với PHP:
/PRODUCTS/PRODUCT/NAME[string-length( ) > 15]/../@category.
Khi được thi hành, biểu thức này trả về hai giá trị:
software và storage
(lưu trữ). Cụ thể là, biểu thức này khớp với giá trị thể loại của mỗi sản
phẩm có tên dài hơn 15 ký tự.
Tài liệu XML trong Liệt kê 1 là tài liệu nguồn cho các biểu thức XPath được thể hiện trong bài này.
Khám phá sự hỗ trợ XPath trong PHP
Việc PHP hỗ trợ XML và XPath không có gì bất ngờ. Thực vậy, các ngôn ngữ kịch bản lệnh web phổ biến nhất đều cung cấp một số hàm thích hợp để làm việc với XPath trong các thư viện lõi của nó.
Trong các thư viện lõi của PHP, bạn có một vài sự lựa chọn khi làm việc với XML:
- SimpleXML.
- DOM.
- XMLWriter/Reader (Trình viết /Trình đọc XML).
SimpleXML dễ sử dụng và có thể thích hợp cho các công việc liên quan đến XML tương đối đơn giản. Nó có một số hạn chế; ví dụ, nó không hỗ trợ đầy đủ việc viết, xác nhận hợp lệ và các vùng tên. Nếu bạn đang xử lý một cây dữ liệu XML lớn, hãy nhớ rằng SimpleXML tải toàn bộ cây tài liệu XML này vào bộ nhớ trước khi xử lý.
Nếu bạn cần phải thực hiện các biểu thức XPath phức tạp hơn và cần kiểm soát toàn bộ tài liệu, thì DOM là một tùy chọn. DOM là viết tắt của Document Object Model (Mô hình đối tượng tài liệu), là một tiêu chuẩn W3C. Bạn có thể sử dụng DOM với PHP bằng cách cài đặt nó như là một phần mở rộng. Các phần mở rộng như là DOM thường không khó cài đặt và chạy. Nhiều khi để chạy mô đun đã được biên dịch, chỉ cần bỏ dấu chú thích ở đầu một dòng trong tệp php.ini của bạn. Cũng giống như SimpleXML, DOM tải toàn bộ cây tài liệu XML vào bộ nhớ trước khi xử lý. Như bạn sẽ thấy sau trong bài này, DOMXPath cũng hoàn toàn dễ sử dụng.
Bạn cũng có thể tải về và cài đặt XML_XPath từ
kho lưu trữ của Kho lưu trữ Ứng dụng và Mở rộng của PHP (PEAR- PHP
Extension and Application Repository). Lớp này sử dụng DOM và cung cấp một
cách truy vấn bằng cách sử dụng XPath để thao tác tài liệu và trích xuất
các giá trị nút nguyên tử.
Nếu bạn làm việc với Zend Framework (Khung công tác Zend), bạn đã có sẵn
một thư viện Zend_Dom_Query để dùng. Nếu khung
công tác PHP cụ thể của bạn không cung cấp các lớp hoặc các hàm đặc biệt
cho XML và XPath, bạn chỉ cần sử dụng những thứ mà PHP đã cung cấp.
XMLWriter/Reader không trực tiếp hỗ trợ XPath nếu không có sự giúp đỡ từ SimpleXML hoặc DOMXPath, vì vậy trong bài này sẽ không trình bày nó thêm nữa.
Bất kể bạn sử dụng thư viện hoặc khung công tác nào, thì việc hiểu biết cách tạo ra các biểu thức XPath là điều cốt yếu để nhận được toàn bộ khả năng tiềm tàng. Khi sử dụng XPath với các thư viện liên quan đến XML của PHP, cú pháp XPath là như nhau. Các ví dụ và trình bày sau đây sử dụng sự kết hợp cả DOM và SimpleXML.
Với tệp products.xml mẫu từ Liệt kê 1 và API của SimpleXML của PHP5, bạn có thể thử nghiệm với các biểu thức XPath khác nhau.
Khi bạn thực thi mã trong Liệt kê 2, kết quả là toàn
bộ tệp XML hoàn chỉnh, tất nhiên là trong một mảng. Biểu thức XPath
/PRODUCTS dẫn đến kết quả khớp với mọi
nút là con của nút gốc (PRODUCTS).
Liệt kê 2. Sử dụng SimpleXML để hiển thị tất cả các nút trong một mảng
<?php
$xml = simplexml_load_file("products.xml");
$products = $xml->xpath("/PRODUCTS");
print_r($products);
?>
------------------------------------------------------------
OUTPUT:
Array ( [0] => SimpleXMLElement Object ( [PRODUCT] =>
Array ( [0] => SimpleXMLElement Object
( [@attributes] => Array ( [category] => software )
[SKU] => soft1234
[SUB_CATEGORY] => Business Analysis
[NAME] => Widget Reporting
[PRICE] => 4500 )
[1] => SimpleXMLElement Object
( [@attributes] => Array ( [category] => software )
[SKU] => soft5678
[SUB_CATEGORY] => Business Analysis
[NAME] => Pro Reporting
[PRICE] => 2300 )
[2] => SimpleXMLElement Object
( [@attributes] => Array ( [category] => storage )
[SKU] => stor01010
[SUB_CATEGORY] => Tape Systems
[NAME] => Tapes Abound
[PRICE] => 1900 )
[3] => SimpleXMLElement Object
( [@attributes] => Array ( [category] => storage )
[SKU] => stor23232
[SUB_CATEGORY] => Disk Systems
[NAME] =>
Widget100 Series [PRICE] => 6500 ) ) ) )
|
Khi bạn thực thi mã trong Liệt kê 3, kết quả là một
mảng đầu ra chứa giá trị của mỗi nút NAME của
cây XML. Lưu ý rằng biểu thức
/PRODUCTS/PRODUCT/NAME tìm mọi nút
khớp với nó trong cây XML chứ không phải chỉ một nút đầu tiên hoặc nút
cuối cùng.
Liệt kê 3. Sử dụng SimpleXML để hiển thị tất cả các tên sản phẩm trong một mảng
<?php
$xml = simplexml_load_file("products.xml");
$products = $xml->xpath("/PRODUCTS/PRODUCT/NAME");
print_r($products);
?>
------------------------------------------------------------
OUTPUT:
Array ( [0] => SimpleXMLElement Object ( [0] => Widget Reporting )
[1] => SimpleXMLElement Object ( [0] => Pro Reporting )
[2] => SimpleXMLElement Object ( [0] => Tapes Abound )
[3] => SimpleXMLElement Object ( [0] => Widget100 Series ) )
|
Nếu bạn cần giá trị của một hoặc một số nút cụ thể dựa trên một số tiêu chí, hãy làm theo các ví dụ trong các Liệt kê 4 và 5.
Xác định vị trí một giá trị nút nguyên tử là để trích xuất các giá trị mong muốn từ tài liệu XML. Khi bạn thực thi mã trong Liệt kê 4, kết quả là giá trị nguyên tử của một nút.
Liệt kê 4. Sử dụng SimpleXML để hiển thị tên của sản phẩm cho một SKU cụ thể
<?php
$xml = simplexml_load_file("products.xml");
$products = $xml->xpath("/PRODUCTS/PRODUCT[SKU='soft5678']/NAME");
print_r($products);
?>
------------------------------------------------------------
OUTPUT:
Array ( [0] => SimpleXMLElement Object ( [0] => Pro Reporting ) )
|
Biểu thức XPath
/PRODUCTS/PRODUCT[SKU='soft5678']/NAME quy
định rõ tất cả các nút khớp với biểu thức này. Trong trường hợp
này, chỉ có một sản phẩm có số SKU phù hợp. Nếu bạn cần phải xác định vị
trí một giá trị của nút, liên quan đến vị trí của nó trong cây
XML, bạn có thể sử dụng hàm position().
Bạn có thể sử dụng các biểu thức điều kiện trong XPath để xác định rõ vị trí của các nút cụ thể. Liệt kê 5 cho thấy một ví dụ về điều này khi sử dụng SimpleXML và XPath với một biểu thức điều kiện.
Liệt kê 5. Sử dụng SimpleXML để xác định vị trí các sản phẩm dựa theo một điều kiện
<?php
$xml = simplexml_load_file("products.xml");
$products = $xml->xpath("/PRODUCTS/PRODUCT[@category='software' and PRICE > 2500]");
print_r($products);
?>
------------------------------------------------------------
OUTPUT:
Array ( [0] => SimpleXMLElement Object ( [@attributes] =>
Array ( [category] => software )
[SKU] => soft1234
[SUB_CATEGORY] => Business Analysis
[NAME] => Widget Reporting [
PRICE] => 4500 ) )
|
Bạn có thể đã nhận thấy rằng các Liệt kê 2, 3, 4 và 5 có cùng một mã PHP giống hệt nhau — khác biệt duy nhất là các biểu thức XPath. Khi bạn nắm vững các bước sử dụng SimpleXML, bạn có toàn bộ sức mạnh của ngôn ngữ XPath sẵn sàng phục vụ bạn. Các bước cần thực hiện với mã PHP khi sử dụng SimpleXML được tóm tắt như sau:
- Tải tệp XML vào bộ nhớ.
- Viết và thực thi biểu thức XPath bằng cách sử dụng
Object->xpath class. - Thao tác các nút và giá trị đã so khớp bằng cách sử dụng các kỹ năng PHP của bạn.
Kết quả đầu ra trong mỗi liệt kê là câu lệnh
print_r($products);. Nó kết xuất giá trị để
hiển thị như một mảng. Trong thực tế, nhiều khả năng bạn sẽ lấy kết quả và
thực hiện một số phép toán trên nó bằng cách sử dụng PHP.
Liệt kê 6 sử dụng DOM và DOMXPath để làm việc với XML và XPath.
Liệt kê 6. Sử dụng DOMXPath để hiển thị tên sản phẩm cho một SKU cụ thể
<?php
$doc = new DOMDocument;
$doc->load('products.xml');
$xpath = new DOMXPath($doc);
$products = $xpath->query("/PRODUCTS/PRODUCT[SKU='soft5678']/NAME");
foreach ($products as $product)
{
print($product->nodeValue);
}
?>
------------------------------------------------------------
OUTPUT:
Pro Reporting
|
Dãy mã PHP mà bạn sử dụng cho DOM và DOMXPath không phức tạp hơn so với các bước của. Các bước trong Liệt kê 6 được tóm tắt theo trình tự sau đây:
- Tải tệp XML vào bộ nhớ từ đối tượng DOM.
- Tạo một đối tượng XPath từ tài liệu đã tải.
- Truy vấn cây XML và trả về một đối tượng các sản phẩm.
Một lần nữa, khi bạn cảm thấy thoải mái với đoạn mã PHP sử dụng DOM, bạn có XPath sẵn sàng thực hiện công việc khó khăn nhàm chán.
Sử dụng XPath cho các chuyển đổi
Trong thực tế, bạn có thể chuyển đổi XML thành XHTML mà không cần sử dụng XSLT. Bạn có thể phát triển tiếp và trở nên sáng tạo hơn với các ví dụ trước đây khi chỉ sử dụng SimpleXML hoặc DOM và tạo các tệp XHTML của bạn để hiển thị. Và bạn cũng có thể thoải mái hơn với cách tiếp cận đó. Tuy nhiên, việc xem xét cách sử dụng XPath rộng lớn hơn là để cho các chuyển đổi XSLT và PHP có hỗ trợ XSLT, nên việc trình diễn là thích hợp. Ngoài ra, việc sử dụng XSLT có thể tiết kiệm cho bạn rất nhiều thời gian và đỡ thất vọng!
Một sự hiểu biết chắc chắn về XPath là cốt yếu khi tiến hành chuyển đổi dữ liệu XML sang các định dạng khác như HTML với XSLT.
Các nguồn cấp dữ liệu RSS và Atom đều được dựa trên XML cho nên XPath là công cụ lý tưởng để duyệt qua nguồn cấp và chọn dữ liệu mong muốn. Giả sử rằng bài này có nguồn cấp dữ liệu Atom riêng của mình dành cho các kỹ thuật PHP và XPath khác nhau, bạn có thể sử dụng một trong các thư viện XML của PHP để trích xuất các mục từ nguồn cấp dữ liệu và hiển thị chúng như mong muốn trên trang web của bạn.
Một tệp XSLT đơn giản giống như tệp trong Liệt kê 7.
Liệt kê 7. Một tệp XSLT đơn giản chuyển đổi một nguồn cấp dữ liệu sang HTML (article_feed.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title><xsl:value-of select=" //title"/></title></head>
<table>
<tr>
<td><xsl:value-of select="//title"/></td>
</tr>
<tr>
<td><i>"<xsl:value-of select="//subtitle"" />",</i></td>
</tr>
<tr>
<td>by <xsl:value-of select="//author"" /></td>
</tr>
<xsl:for-each select="//feed/entry"">
<table border="1" >
<tr>
<td>Title</td>
<td><xsl:value-of select="title""/></td>
</tr>
<tr>
<td>Summary</td><td><xsl:value-of select="summary""/></td>
</tr>
<tr></tr>
</table>
<br/>
</xsl:for-each>
</table>
</html>
</xsl:template>
</xsl:stylesheet>
|
Hai dấu gạch chéo thuận (//) chỉ thị cho XPath
so khớp với nút có tên đầu tiên bắt đầu từ nút gốc. Với mỗi nút duy nhất
cho tiêu đề, phụ đề và tác giả, đây là một cách viết tắt để biểu thị đường
dẫn vị trí mà không cần nhập đường dẫn tuyệt đối. Vì vòng lặp
for-each làm việc trong ngữ cảnh của nút
//feed/entry, nên các đường dẫn tương
đối cho tiêu đề và bản tóm tắt được sử dụng.
Sử dụng tệp XSLT của Liệt kê 7, bây giờ bạn có thể viết mã PHP thích hợp để thực hiện chuyển đổi, như trong Liệt kê 8.
Liệt kê 8. Sử dụng DOM để chuyển đổi XLST
<?php
$doc = new DOMDocument();
$xmlStream = <<<MyFeed
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title>Using XPath with PHP</title>
<author><name>Tracy Bost</name></author>
<subtitle type="html">
Let XPath do the hard work for you when working with XML</subtitle>
<link rel="self" type="text/html"
hreflang="en" href="http://www.ibm.com/developerworks/"/>
<updated>15 Aug 2011 22:51:48 +0000</updated>
<entry>
<title>SimpleXML & XPath </title>
<summary>If you are using SimpleXML to parse XML or
RSS feeds, XPath is great to use!</summary>
<link rel="self" type="text/html" hreflang="en" href=""/>
<published>21 Apr 2011 04:00:00 +0000</published>
<updated>21 Apr 2011 04:00:00 +0000</updated>
</entry>
<entry>
<title>DOMXPath</title>
<summary>If you are using DOM for traversal XML documents,
give DOMXPath a try! </summary>
<link rel="self" type="text/html" hreflang="en" href=""/>
<id>tag:developerWorks.dw,19 Apr 2011 04:00:00 +0000</id>
<published>12 Aug 2011 04:00:00 +0000</published>
<updated>12 Aug 2011 04:00:00 +0000</updated>
</entry>
<entry>
<title>XMLReader with XPath</title>
<summary>For complex XML document reading and writing,
using XPath with XReader can ease your burden!</summary>
<link rel="self" type="text/html" hreflang="en" href=""/>
<id>tag:developerWorks.dw,19 Apr 2011 04:00:00 +0000</id>
<published>08 Aug 2011 04:00:00 +0000</published>
<updated>08 Aug 2011 04:00:00 +0000</updated>
</entry>
</feed>
MyFeed;
$doc->loadXML($xmlStream); $xpath = new DOMXpath($doc);
$xslt = new XSLTProcessor(); $xsl = new DOMDocument();
$xsl->load( 'xsl/article_feed.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet( $XSL );
print $xslt->transformToXML( $XML );
?>
------------------------------------------------------------
OUTPUT:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Using XPath with PHP</title>
</head>
<body>
<table>
<tr>
<td>Using XPath with PHP</td>
</tr>
<tr>
<td><i>"Let XPath do the hard work for you when working with XML",</i></td>
</tr>
<tr>
<td>by Tracy Bost</td>
</tr>
<table border="1">
<tr>
<td>Title</td>
<td>SimpleXML & XPath </td>
</tr>
<tr>
<td>Summary</td>
<td>If you are using SimpleXML to parse XML or RSS feeds,
XPath is great to use!</td>
</tr>
<tr/><
/table>
<br/>
<table border="1">
<tr>
<td>Title</td>
<td>DOMXPath</td>
</tr>
<tr>
<td>Summary</td>
<td>If you are using DOM for traversal XML documents,
give DOMXPath a try! </td>
</tr>
<tr/>
</table>
<br/>
<table border="1">
<tr>
<td>Title</td>
<td>XMLReader with XPath</td>
</tr>
<tr>
<td>Summary</td>
<td>For complex XML document reading and writing,
using XPath with XReader can ease your burden!</td>
</tr>
<tr/>
</table>
<br/>
</table>
</body>
</html>
|
Lưu ý rằng Liệt kê 8 đã không có câu lệnh
$xpath->query() như thể hiện trong Liệt kê 6. Tất cả các biểu thức XPath được đặt trong
tệp XSL. Chỉ cần sử dụng DOM để nhập khẩu bản định kiểu, rồi để cho nó
thực hiện chuyển đổi!
Trong bài này, bạn đã được giới thiệu về XPath và cách bạn có thể sử dụng nó trong môi trường PHP5 khi bạn làm việc với XML. Giống như rất nhiều các thư viện khác có sẵn trong PHP, các thư viện XML cho phép bạn là một nhà phát triển để tập trung vào các yêu cầu nhiệm vụ của bạn chứ không phải việc nối buộc mức thấp các lớp và các đối tượng. XPath có thể giúp loại bỏ những nhiệm vụ nặng nề về định vị và phân tích cú pháp dữ liệu trong XML. Tùy thuộc vào các nhu cầu của bạn, bạn có thể tùy chọn sử dụng SimpleXML, DOM, hoặc các thư viện XML của một khung công tác, ví dụ như Zend Framework. May mắn thay, tất cả chúng đều làm việc với XPath của W3C theo một kiểu tiêu chuẩn. Vì vậy, khi bạn tải tệp hoặc luồng dữ liệu XML tiếp theo đó, không có lo ngại nào về việc dẫn hướng đến các giá trị chính xác mà bạn cần xử lý.
Học tập
- Các đặc tả XPath 1.0: Tìm hiểu cú pháp cơ bản của
XPath.
- Các đặc tả XPath 2.0: Tìm hiểu thêm về những cải
tiến trên XPath 1.0.
- XML cho các nhà phát triển PHP,
Phần 1: Khởi động PHP-với-XML trong 15 phút (Cliff Morgan,
developerWorks, 03.2007): Làm quen với việc thực hiện XML cho PHP5. Đây là
bài đầu tiên của một loạt bài ba phần giúp các nhà phát triển mới sử dụng
XML với PHP đọc, phân tích cú pháp, thao tác và viết một tệp XML ngắn và
đơn giản bằng cách sử dụng DOM và SimpleXML trong một môi trường
PHP.
- XML cho các nhà phát triển PHP,
Phần 2: Các kỹ thuật phân tích cú pháp XML nâng cao (Cliff Morgan,
developerWorks, 03.2007): Trong phần 2 của loạt bài ba phần này, hãy khám
phá các kỹ thuật phân tích cú pháp XML trong PHP5 và tìm hiểu cách quyết
định phương pháp phân tích cú pháp nào là tốt nhất cho ứng dụng của
bạn.
- XML cho nhà phát triển PHP, Phần
3: Các kỹ thuật nâng cao để đọc, thao tác và viết XML (Cliff
Morgan, developerWorks, 03.2007): Tìm hiểu thêm các kỹ thuật để đọc, thao
tác và viết XML trong PHP5 trong bài viết cuối cùng này của một loạt bài
ba phần về XML cho các nhà phát triển PHP.
- Thao tác XML: Đọc về nó trên trang web
php.net và tìm hiểu thêm về cách sử dụng XML với PHP.
- Hướng dẫn sử dụng DOMXPath: Đọc hướng dẫn này trên trang web
php.net và tìm hiểu thêm về cách sử dụng lớp DOMXPath.
- Thêm những bài viết khác của tác giả này (Tracy Bost,
developerWorks, 06.2011- cho đến nay): Đọc các bài viết về Linux®, bố
trí đĩa cứng, các thư viện chia sẻ và các công nghệ khác.
- Mới đến với XML? Lấy các tài nguyên bạn cần để tìm hiểu
XML.
- Vùng XML
trên developerWorks: Tìm tài nguyên bạn cần để nâng cao các kỹ
năng của bạn trong lĩnh vực XML, bao gồm các DTD, các lược đồ và XSLT. Xem
Thư viện kỹ thuật XML với một loạt các bài viết và các lời
khuyên, các hướng dẫn, các tiêu chuẩn kỹ thuật và các Sách Đỏ của
IBM.
- Chứng chỉ XML
của IBM: Tìm hiểu cách bạn có thể trở thành một nhà phát triển có
chứng chỉ của IBM về XML và các công nghệ liên quan.
- Các sự kiện kỹ thuật và webcast của developerWorks: Theo sát với
công nghệ trong các phiên này.
- developerWorks trên
Twitter: Tham gia ngày hôm nay để theo dõi tweets của
developerWorks.
- developerWorks podcasts: Nghe các cuộc phỏng vấn và các cuộc thảo
luận thú vị cho các nhà phát triển phần mềm.
- Các trình diễn theo yêu cầu của developerWorks: Xem các trình
diễn khác nhau, từ cài đặt và thiết lập sản phẩm cho những người mới bắt
đầu đến các chức năng nâng cao cho các nhà phát triển có kinh
nghiệm.
Lấy sản phẩm và công nghệ
- PEAR - Kho lưu trữ ứng dụng và mở rộng
PHP: Truy cập để tìm hiểu về khung công tác này và hệ thống phân
phối các thành phần PHP tái sử dụng.
- Khung công tác Zend: Tải về một
khung công tác mã nguồn mở để phát triển PHP.
-
Các
phiên bản đánh giá sản phẩm của IBM: Tải về hoặc khám phá các bản dùng thử trực tuyến trong Sandbox SOA của IBM và
nhận các công cụ phát triển ứng dụng thực hành và các sản phẩm phần mềm
trung gian từ DB2®, Lotus®, Rational®, Tivoli® và
WebSphere®.
Thảo luận
- Các diễn đàn thảo luận của vùng XML: Tham gia vào bất kỳ cuộc
thảo luận liên quan đến XML.
- Cộng đồng developerWorks: Kết nối với những người dùng
developerWorks khác trong khi khám phá các blog, các diễn đàn, các nhóm và
các wiki hướng nhà phát triển.

Tracy Bost là một nhà phát triển phần mềm và kỹ sư các hệ thống dầy dạn. Chuyên ngành của ông là tích hợp ứng dụng mức doanh nghiệp. Trước đây ông giữ chức vụ là đồng chủ tịch của nhóm làm việc Các quy tắc nghiệp vụ của Tổ chức bảo trì tiêu chuẩn công nghiệp thế chấp (MISMO- Mortgage Industry Standards Maintenance Organization) và đồng chủ tịch ủy ban về các tiêu chuẩn công nghiệp cho RuleML2010. Ông đã làm việc trong nhiều ngành nghề, bao gồm thế chấp, bất động sản và khu vực phi lợi nhuận.