1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu XML phần 1 doc

7 400 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Chương 5 : XML Một trong những khía cạnh đáng chú ý nhất của Microsoft .NET Framework là sự tích hợp sâu sắc với XML. Trong nhiều ứng dụng .NET, bạn sẽ không nhận thấy rằng mình đang sử dụng các kỹ thuật XML—chúng sẽ được sử dụng phía hậu trường khi bạn tuần tự hóa một Microsoft ADO.NET DataSet, gọi một dịch vụ Web XML, hoặc đọc các thiết lập ứng dụng trong một file cấu hình Web.config. Trong các trường hợp khác, bạn sẽ muốn làm việc trực tiếp với không gian tên System.Xml để thao tác dữ liệu XML. Các tác vụ XML thông thường không chỉ phân tích một file XML mà còn xác nhận tính hợp lệ của nó dựa trên một XML Schema, áp dụng phép biến đổi XSL để tạo một tài liệu hay trang HTML mới, và tìm kiếm một cách thông minh với XPath. Các mục trong chương này trình bày các vấn đề sau:  Các kỹ thuật dùng để đọc, phân tích, và thao tác dữ liệu XML (mục 5.1, 5.2, 5.3, và 5.7).  Duyệt một tài liệu XML để tìm các nút cụ thể theo tên (mục 5.4), theo không gian tên (mục 5.5), hay theo biểu thức XPath (mục 5.6).  Xác nhận tính hợp lệ của một tài liệu XML dựa trên một XML Schema (mục 5.8).  Tuần tự hóa một đối tượng thành XML (mục 5.9), tạo XML Schema cho một lớp (mục 5.10), và tạo mã nguồn cho lớp dựa trên một XML Schema (mục 5.11).  Biến đổi một tài liệu XML thành một tài liệu khác bằng XSLT stylesheet (mục 5.12). 1.1 Hiển thị cấu trúc của một tài liệu XML trong TreeView V V Bạn cần hiển thị cấu trúc và nội dung của một tài liệu XML trong một ứng dụng dựa-trên-Windows. # # Nạp tài liệu XML bằng lớp System.Xml.XmlDocument. Sau đó, viết một phương thức để chuyển một XmlNode thành một System.Windows.Forms.TreeNode, rồi gọi nó một cách đệ quy để duyệt qua toàn bộ tài liệu. .NET Framework cung cấp nhiều cách khác nhau để xử lý các tài liệu XML. Cách mà bạn sử dụng tùy thuộc vào tác vụ cần lập trình. Một trong số đó là lớp XmlDocument. Lớp này cung cấp một dạng biểu diễn trong-bộ-nh ớ cho một tài liệu XML, tuân theo W3C Document Object Model (DOM); cho phép bạn duyệt qua các nút theo bất kỳ hướng nào, chèn và loại bỏ nút, và thay đổi động cấu trúc lúc chạy. Bạn hãy vào [http://www.w3c.org] để biết thêm chi tiết về DOM. Để sử dụng lớp XmlDocument, bạn chỉ việc tạo một thể hiện của lớp này rồi gọi phương thức Load cùng với một tên file, một Stream, một TextReader, hay một XmlReader (bạn cũng có thể cung cấp một URL chỉ đến một tài liệu XML). Thể hiện XmlDocument sẽ chứa tất cả các nút (dạng cây) có trong tài liệu nguồn. Điểm nhập (entry point) dùng để truy xuất các nút này là phần tử gốc, được cấp thông qua thuộc tính XmlDocument.DocumentElement. Đây là một đối tượng XmlElement, có thể chứa nhiều đối tượng XmlNode lồng bên trong, các đối tượng này có thể chứa nhiều đối tượng XmlNode n ữa, và cứ tiếp tục như thế. Một XmlNode là phần cấu thành cơ bản của một file XML. Một nút XML có thể là một phần tử (element), một đặc tính (attribute), lời chú thích, hay text. Khi làm việc với XmlNode hay một lớp dẫn xuất từ đó (như XmlElement hay XmlAttribute), bạn có thể sử dụng các thuộc tính cơ bản sau đây: • ChildNodes là tập hợp các nút lồng bên trong ở mức đầu tiên. • Name là tên của nút. • NodeType là một thành viên thuộc kiểu liệt kê System.Xml.XmlNodeType, cho biết kiểu của nút (phần tử, đặc tính, text .). • Value là nội dung của nút, nếu đó là nút text hay nút CDATA. • Attributes là tập hợp các nút mô tả các đặc tính được áp dụng cho phần tử. • InnerText là chuỗi chứa giá trị (text) của nút hiện hành và tất cả các nút lồng bên trong. • InnerXml là chuỗi chứa thẻ đánh dấu XML cho tất cả các nút lồng bên trong. • OuterXml là chuỗi chứa thẻ đánh dấu XML cho nút hiện hành và tất cả các nút lồng bên trong. Ví dụ dưới đây duyệt qua tất cả các nút của một XmlDocument (bằng thuộc tính ChildNodes và một phương thức đệ quy) rồi hiển thị chúng trong một TreeView. using System; using System.Windows.Forms; using System.Xml; public class XmlTreeDisplay : System.Windows.Forms.Form{ private System.Windows.Forms.Button cmdLoad; private System.Windows.Forms.Label lblFile; private System.Windows.Forms.TextBox txtXmlFile; private System.Windows.Forms.TreeView treeXml; // (Bỏ qua phần mã designer.) private void cmdLoad_Click(object sender, System.EventArgs e) { // Xóa cây. treeXml.Nodes.Clear(); // Nạp tài liệu XML. XmlDocument doc = new XmlDocument(); try { doc.Load(txtXmlFile.Text); }catch (Exception err) { MessageBox.Show(err.Message); return; } // Đổ dữ liệu vào TreeView. ConvertXmlNodeToTreeNode(doc, treeXml.Nodes); // Mở rộng tất cả các nút. treeXml.Nodes[0].ExpandAll(); } private void ConvertXmlNodeToTreeNode(XmlNode xmlNode, TreeNodeCollection treeNodes) { // Thêm một TreeNode mô tả XmlNode này. TreeNode newTreeNode = treeNodes.Add(xmlNode.Name); // Tùy biến phần text cho TreeNode dựa vào // kiểu và nội dung của XmlNode. switch (xmlNode.NodeType) { case XmlNodeType.ProcessingInstruction: case XmlNodeType.XmlDeclaration: newTreeNode.Text = "<?" + xmlNode.Name + " " + xmlNode.Value + "?>"; break; case XmlNodeType.Element: newTreeNode.Text = "<" + xmlNode.Name + ">"; break; case XmlNodeType.Attribute: newTreeNode.Text = "ATTRIBUTE: " + xmlNode.Name; break; case XmlNodeType.Text: case XmlNodeType.CDATA: newTreeNode.Text = xmlNode.Value; break; case XmlNodeType.Comment: newTreeNode.Text = "<!--" + xmlNode.Value + "-->"; break; } // Gọi phương thức này một cách đệ quy cho mỗi đặc tính // (XmlAttribute là một lớp con của XmlNode). if (xmlNode.Attributes != null) { foreach (XmlAttribute attribute in xmlNode.Attributes) { ConvertXmlNodeToTreeNode(attribute, newTreeNode.Nodes); } } // Gọi phương thức này một cách đệ quy cho mỗi nút con. foreach (XmlNode childNode in xmlNode.ChildNodes) { ConvertXmlNodeToTreeNode(childNode, newTreeNode.Nodes); } } } Xét file XML dưới đây (ProductCatalog.xml): <?xml version="1.0" ?> <productCatalog> <catalogName>Jones and Jones Unique Catalog 2004</catalogName> <expiryDate>2005-01-01</expiryDate> <products> <product id="1001"> <productName>Gourmet Coffee</productName> <description>The finest beans from rare Chilean plantations.</description> <productPrice>0.99</productPrice> <inStock>true</inStock> </product> <product id="1002"> <productName>Blue China Tea Pot</productName> <description>A trendy update for tea drinkers.</description> <productPrice>102.99</productPrice> <inStock>true</inStock> </product> </products> </productCatalog> Hình 5.1 Cấu trúc của một tài liệu XML [ Hình 5.2 InnerText của phần tử gốc Hình 5.3 InnerXml của phần tử gốc The image part with relationship ID rId5 was not found in the file. The image part with relationship ID rId6 was not found in the file. The image part with relationship ID rId7 was not found in the file. Hình 5.4 OuterXml của phần tử gốc 1.2 Chèn thêm nút vào tài liệu XML V V Bạn cần điều chỉnh một tài liệu XML bằng cách chèn vào dữ liệu mới, hoặc bạn muốn tạo một tài liệu hoàn toàn mới trong bộ nhớ. # # Tạo nút bằng một phương thức của XmlDocument (như CreateElement, CreateAttribute, CreateNode .). Kế tiếp, chèn nó vào bằng một phương thức của XmlNode (như InsertAfter, InsertBefore, hay AppendChild). Chèn một nút vào XmlDocument bao gồm hai bước: tạo nút rồi chèn nó vào vị trí thích hợp. Sau đó, bạn có thể gọi XmlDocument.Save để lưu lại những thay đổi. Để tạo một nút, bạn sử dụng một trong các phương thức của XmlDocument bắt đầu bằng từ Create, tùy thuộc vào kiểu củ a nút. Việc này bảo đảm nút sẽ có cùng không gian tên như phần còn lại của tài liệu (bạn cũng có thể cung cấp một không gian tên làm đối số). Kế tiếp, bạn phải tìm một nút phù hợp và sử dụng một trong các phương thức chèn của nó để thêm nút mới vào. Ví dụ dưới đây trình bày kỹ thuật này bằng cách tạo một tài liệu XML mới: using System; using System.Xml; public class GenerateXml { private static void Main() { // Tạo một tài liệu mới rỗng. XmlDocument doc = new XmlDocument(); XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); doc.AppendChild(docNode); // Tạo và chèn một phần tử mới. XmlNode productsNode = doc.CreateElement("products"); doc.AppendChild(productsNode); The image part with relationship ID rId8 was not found in the file. // Tạo một phần tử lồng bên trong (cùng với một đặc tính). XmlNode productNode = doc.CreateElement("product"); XmlAttribute productAttribute = doc.CreateAttribute("id"); productAttribute.Value = "1001"; productNode.Attributes.Append(productAttribute); productsNode.AppendChild(productNode); // Tạo và thêm các phần tử con cho nút product này // (cùng với dữ liệu text). XmlNode nameNode = doc.CreateElement("productName"); nameNode.AppendChild(doc.CreateTextNode("Gourmet Coffee")); productNode.AppendChild(nameNode); XmlNode priceNode = doc.CreateElement("productPrice"); priceNode.AppendChild(doc.CreateTextNode("0.99")); productNode.AppendChild(priceNode); // Tạo và thêm một nút product khác. productNode = doc.CreateElement("product"); productAttribute = doc.CreateAttribute("id"); productAttribute.Value = "1002"; productNode.Attributes.Append(productAttribute); productsNode.AppendChild(productNode); nameNode = doc.CreateElement("productName"); nameNode.AppendChild(doc.CreateTextNode("Blue China Tea Pot")); productNode.AppendChild(nameNode); priceNode = doc.CreateElement("productPrice"); priceNode.AppendChild(doc.CreateTextNode("102.99")); productNode.AppendChild(priceNode); // Lưu tài liệu. doc.Save(Console.Out); Console.ReadLine(); } } . một XML Schema (mục 5 .11 ).  Biến đổi một tài liệu XML thành một tài liệu khác bằng XSLT stylesheet (mục 5 .12 ). 1. 1 Hiển thị cấu trúc của một tài liệu XML. System.EventArgs e) { // Xóa cây. treeXml.Nodes.Clear(); // Nạp tài liệu XML. XmlDocument doc = new XmlDocument(); try { doc. Load(txtXmlFile.Text); }catch (Exception

Ngày đăng: 23/12/2013, 20:15

TỪ KHÓA LIÊN QUAN

w