Bạn sử dụng một đối tượng của lớp XmlDocument để đại diện cho một tài liệu XML trong một chương trình C#. Một đối tượng XmlDocument lưu trữ những nút của tài liệu XML trong những đối tượng của lớp XmlNode. Bạn có thể, chẳng hạn, tải những hàng từ cơ sở dữ liệu vào trong một đối tượng Dataset, rồi tải một sự trình bày XML của những hàng đó vào trong một đối tượng XmlDocument. Bảng 16.5 cho thấy một số những thuộc tính XmlDocument; Bảng 16.6 cho thấy một số những phương pháp XmlDocument; và Bảng 16.7 trình bày những sự kiện XmlDocument.
Bảng 16.5: những thuộc tính XmlDocument
Thuộc tính Kiểu dữ liệu Mô tả
Attributes XmlAttributeCollection Lấy đối tượng XmlAttributeCollection chứa những thuộc tính của nút hiện thời.
BaseURI string Lấy cơ sở URI của nút hiện thời. ChildNodes XmlNodeList Lấy tất cả những nút con của nút.
DocumentElement XmlElement Lấy đối tượng XmlElement gốc cho tài liệu XML. DocumentType XmlDocumentType Lấy nút chứa khai báo DOCTYPE.
FirstChild XmlNode Lấy nút con đầu tiên.
HasChildNodes bool Lấy một bool cho biết liệu nút này có bất kỳ nút con nào không. Implementation XmlImplementation Lấy đối tượng XmlImplementation cho tài liệu XML.
InnerText string Lấy hay gán những giá trị ràng buộc của nút và tất cả nút con của nó.
InnerXml string Lấy hay gán XML đại diện cho nút con hiện thời.
IsReadOnly bool Lấy một giá trị bool cho biết liệu có phải nút hiện thời là chỉ đọc. LastChild XmlNode Lấy nút con cuối cùng.
Name string Lấy tên có đủ tiêu chuẩn của nút. NamespaceURI string Lấy không gian tên URI của nút.
NameTable XmlNameTable Lấy đối tượng XmlNameTable có liên hệ với sự thi hành XML. NextSibling XmlNode Lấy ngay lập tức nút tiếp theo sau nút hiện thời.
NodeType XmlNodeType Lấy kiểu của nút hiện thời.
OuterXml string Lấy XML đại diện cho nút hiện thời và tất cả nút con của nó. OwnerDocument XmlDocument Lấy đối tượng XmlDocument mà nút hiện thời thuộc về. ParentNode XmlNode Lấy nút cha của nút hiện thời.
Prefix string Lấy hay gán tiền tố namespace của nút hiện thời.
PreserveWhitespace bool Lấy hay gán một giá trị bool cho biết liệu có phải khỏang trắng sẽ được duy trì khi XML được tải hay lưu. Mặ định là false.
PreviousSibling XmlNode Lấy ngay lập tức nút trước nút hiện thời. Value string Lấy hay gán giá trị của nút hiện thời
XmlResolver XmlResolver Gán đối tượng XmlResolver dùng cho việc giải quyết những tài nguyên ngoài.
Bảng 16.6: những phương thức XmlDocument
Phương thức Kiểu trả về Mô tả
AppendChild() XmlNode Thêm nút được chỉ định vào cuối của những nút con. CloneNode() XmlNode Tạo ra một bản sao của nút.
CreateAttribute() XmlAttribute Tạo ra một đối tượng XmlAttribute của tên được chỉ định. CreateCDataSection() XmlCDataSection Tạo ra một đối tượng XmlCDataSection với dữ liệu chỉ
định.
CreateComment() XmlComment Tạo ra một đối tượng XmlComment với dữ liệu chỉ định. CreateDocumentFragment() XmlDocumentFragment Tạo ra một đối tượng XmlDocumentFragment với dữ liệu
chỉ định.
CreateDocumentType() XmlDocumentType Tạo ra một đối tượng XmlDocumentType mới với dữ liệu chỉ định.
CreateElement() XmlElement Bị quá tải. Tạo ra một đối tượng XmlElement.
CreateEntityReference() XmlEntityReference Tạo ra một đối tượng XmlEntityReference với tên được chỉ rõ.
CreateNavigator() XpathNavigator Tạo ra một đối tượng XpathNavigator mà bạn có thể dùng để định hướng tài liệu XML.
CreateNode() XmlNode Bị quá tải. Tạo ra một đối tượng XmlNode.
CreateTextNode() XmlText Tạo ra một đối tượng XmlText với văn bản được chỉ rõ. CreateWhitespace() XmlWhitespace Tạo ra một đối tượng XmlWhitespace.
CreateXmlDeclaration() XmlDeclaration Tạo ra một đối tượng XmlDeclaration.
GetElementById() XmlElement Lấy đối tượng XmlElement với ID được chỉ rõ.
GetElementsByTagName() XmlNodeList Bị quá tải. Trả về một đối tượng XmlNodeList chứa một danh sách của tất cả các phần tử con phù hợp với tên được chỉ rõ.
GetNamespaceOfPrefix() string Tìm khai báo xmlns gần nhất với tiền tố không gian tên chỉ định trong phạm vi cho nút hiện thời, và trả về không gian tên URI.
định trong phạm vi cho nút hiện thời, và trả về tiền tố không gian tên.
ImportNode() XmlNode Nhập vào một nút từ tài liệu XML khác vào trong tài liệu XML hiện thời.
InsertAfter() XmlNode Chèn nút được chỉ rõ ngay sau nút tham chiếu chỉ định. InsertBefore() XmlNode Chèn nút được chỉ rõ ngay trước nút tham chiếu chỉ định. Load() void Bị quá tải. Tải dữ liệu XML vào trong đối tượng
XmlDocument của bạn.
LoadXml() void Tải tài liệu XML từ chuỗi được chỉ rõ vào trong đối tượng XmlDocument của bạn.
PrependChild() XmlNode Thêm nút được chỉ rõ vào nơi bắt đầu của những nút con. ReadNode() XmlNode Tạo ra một đối tượng XmlNode dựa vào thông tin trong
một đối tượng XmlReader được chỉ rõ. XmlReader của bạn phải được định vị trên một nút hay thuộc tính. RemoveAll() void Loại bỏ tất cả nút con và những thuộc tính của nút hiện
thời.
RemoveChild() XmlNode Loại bỏ nút con chỉ định. ReplaceChild() XmlNode Thay một nút con với nút khác.
Save() void Bị quá tải. Lưu tài liệu XML tới vị trí được chỉ rõ. SelectNodes() XmlNodeList Bị quá tải. Lựa chọn một danh sách của những nút phù
hợp với biểu thức XPath được chỉ rõ.
SelectSingleNode() XmlNode Bị quá tải. Lựa chọn XmlNode đầu tiên phù hợp với biểu thức XPath được chỉ rõ.
WriteContentTo() void Lưu tất cả tài liệu con của tài liệu XML vào đối tượng XmlWriter được chỉ định.
WriteTo() void Lưu tài liệu XML vào đối tượng XmlWriter chỉ định. Bảng 16.7: những sự kiện XmlDocument
Sự kiện Event Handler Mô tả
NodeChanging XmlNodeChangedEventHandler Khởi phát trước khi một giá trị trong một nút được thay đổi. NodeChanged XmlNodeChangedEventHandler Khởi phát sau khi một giá trị trong một nút được thay đổi. NodeInserting XmlNodeChangedEventHandler Khởi phát trước khi một nút được chèn vào.
NodeInserted XmlNodeChangedEventHandler Khởi phát sau khi một nút được chèn vào. NodeRemoving XmlNodeChangedEventHandler Khởi phát trước khi một nút được loại bỏ. NodeRemoved XmlNodeChangedEventHandler Khởi phát sau khi một nút được loại bỏ.
Danh sách 16.17 cho thấy một chương trình minh họa sự sử dụng một đối tượng XmlDocument. Chương trình này thực hiện những bước sau đây
1. Tạo ra một đối tượng Đataset có tên myDataSet và điền đầy nó với hai hàng đầu tiên từ bảng những khách hàng.
2. Tạo ra một đối tượng XmlDocument có tên myXmlDocument, và sau đó tải nó với XML từ myDataSet. Bạn có thể sử dụng phương thức GetXml() để trả về những hàng Customer trong myDataSet như một chuỗi chứa một tài liệu XML đầy đủ. rồi bạn có thể sử dụng chuỗi đầu ra từ GetXml() như đầu vào phương thức LoadXml() của myXmlDocument; Điều này tải myXmlDocument với tài liệu XML chứa những chi tiết khách hàng (customer details).
3. Trình bày XML trong myXmlDocument sử dụng phương thức Save() , thông qua Console.Out tới phương thức Save(). Điều này dẫn đến tài liệu XML sẽ được trình bày trên màn hình.
4. Truy xuất những đối tượng XmlNode trong myXmlDocument sử dụng phương thức SelectNodes() , và sau đó trình bày văn bản được chứa đựng trong những nút con của mỗi XmlNode sử dụng thuộc tính
InnerText. Bạn chuyển một biểu thức XPath tới SelectNodes() để truy xuất những nút được yêu cầu . 5. Truy xuất XmlNode cho khách hàng ANATR sử dụng phương thức SelectSingleNode() , và hiển thị văn
bản chứa trong những nút con của XmlNode này. Bạn chuyển một biểu thức XPath tới SelectSingleNode() để truy xuất nút được yêu cầu.
Danh sách 16.17: USINGXMLDOCUMENT.CS /*
UsingXmlDocument.cs illustrates the use of an XmlDocument object */ using System; using System.Data; using System.Data.SqlClient; using System.Xml; class UsingXmlDocument {
public static void Main() {
SqlConnection mySqlConnection = new SqlConnection(
"server=localhost;database=Northwind;uid=sa;pwd=sa" );
SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); mySqlCommand.CommandText =
"SELECT TOP 2 CustomerID, CompanyName, Country "+ "FROM Customers "+
"ORDER BY CustomerID";
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(); mySqlDataAdapter.SelectCommand = mySqlCommand; // step 1: create a DataSet object and fill it with the top 2 rows // from the Customers table
DataSet myDataSet = new DataSet(); mySqlConnection.Open();
mySqlDataAdapter.Fill(myDataSet, "Customers"); mySqlConnection.Close();
// step 2: create an XmlDocument object and load it with the XML from // the DataSet; the GetXml() method returns the rows in
// myDataSet as a string containing a complete XML document; and // the LoadXml() method loads myXmlDocument with the XML document // string returned by GetXml()
XmlDocument myXmlDocument = new XmlDocument(); myXmlDocument.LoadXml(myDataSet.GetXml());
// step 3: display the XML in myXmlDocument using the Save() method Console.WriteLine("Contents of myXmlDocument:");
myXmlDocument.Save(Console.Out);
// step 4: retrieve the XmlNode objects in myXmlDocument using the // SelectNodes() method; you pass an XPath expression to SelectNodes()
Console.WriteLine("\n\nCustomers:"); foreach (XmlNode myXmlNode in
myXmlDocument.SelectNodes("/NewDataSet/Customers")) { Console.WriteLine("CustomerID = "+ myXmlNode.ChildNodes[0].InnerText); Console.WriteLine("CompanyName = "+ myXmlNode.ChildNodes[1].InnerText); Console.WriteLine("Country = "+ myXmlNode.ChildNodes[2].InnerText); }
// step 5: retrieve the XmlNode for the ANATR customer using // the SelectSingleNode() method; you pass an XPath
// expression to SelectSingleNode
Console.WriteLine("\nRetrieving node with CustomerID of ANATR"); XmlNode myXmlNode2 = myXmlDocument.SelectSingleNode( "/NewDataSet/Customers[CustomerID=\" ANATR\"]" ); Console.WriteLine("CustomerID = "+ myXmlNode2.ChildNodes[0].InnerText); Console.WriteLine("CompanyName = "+ myXmlNode2.ChildNodes[1].InnerText); Console.WriteLine("Country = "+ myXmlNode2.ChildNodes[2].InnerText); } }
Ghi nhớ, Bạn sẽ cần thay đổi chuỗi kết nối cho đối tượng SqlConnection của bạn để kết nối tới cơ sở dữ liệu của bạn gần điểm khởi đầu của chương trình này.
Đầu ra từ chương trình này như sau:
Contents of myXmlDocument: <?xml version="1.0" encoding="IBM437"?> <NewDataSet> <Customers> <CustomerID>ALFKI</CustomerID> <CompanyName>Alfreds Futterkiste</CompanyName> <Country>Germany</Country> </Customers> <Customers> <CustomerID>ANATR</CustomerID>
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName> <Country>Mexico</Country>
</Customers> </NewDataSet> Customers:
CustomerID = ALFKI
CompanyName = Alfreds Futterkiste Country = Germany
CustomerID = ANATR
CompanyName = Ana Trujillo Emparedados y helados Country = Mexico
Retrieving node with CustomerID of ANATR CustomerID = ANATR
CompanyName = Ana Trujillo Emparedados y helados Country = Mexico