RSS

Sử dụng XML trong .NET

06 May

I. Từ khóa : XML, XPath, W3C

II. Giới thiệu :

XML viết tắt của eXtensible Markup Language, đây là ngôn ngữ dùng để lưu trữ thông tin mà không cần mô tả cấu trúc.

Sử dụng XML là lợi thế trong việc chuyển tải dữ liệu giữa các ứng dụng với nhau như từ Java -> .NET và ngược lại.

III. Ví dụ một tập tin XML

<?xml version=”1.0″encoding=”utf-8″?>

<books>

<book>

<author>Carson</author>

<price format=”dollar”>31.95</price>

<pubdate>05/01/2001</pubdate>

</book>

<pubinfo>

<publisher>MSPress</publisher>

<state>WA</state>

</pubinfo>

</books>

Trong đó : book là element, price là element, format là attributes name, “dollar” là attributes value
Diễn giải tập tin XML:

IV. Để thao tác với XML trong .NET, ta có 2 cách dùng:

· Sử dụng XmlTextReader, XmlTextWriter

· Sử dụng mô hình DOM (Document Object Model)

· Sử dụng namespace : System.Xml

o Cách 1 : Sử dụng XmlTextReader, XmlTextWriter

Sử dụng XmlTextReader để đọc dữ liệu từ tập tin XML

· Thực hiện load tập tin XML trong constructor:

Ví dụ

XmlTextReader xmlReader = new XmlTextReader(“data.xml”);

· Thực hiện đọc tập tin xml bằng phương thức Read

Ví dụ

while (reader.Read()) {

switch (reader.NodeType) {

case XmlNodeType.Element:

Console.Write(“<{0}>”, reader.Name);

break;

case XmlNodeType.Text:

Console.Write(reader.Value);

break;

case XmlNodeType.CDATA:

Console.Write(“<![CDATA[{0}]]>”, reader.Value);

break;

case XmlNodeType.ProcessingInstruction:

Console.Write(“<?{0} {1}?>”, reader.Name, reader.Value);

break;

case XmlNodeType.Comment:

Console.Write(“<!–{0}–>”, reader.Value);

break;

case XmlNodeType.XmlDeclaration:

Console.Write(“<?xml version=’1.0′?>”);

break;

case XmlNodeType.Document:

break;

case XmlNodeType.EndElement:

Console.Write(“</{0}>”, reader.Name);

break;

}

}

}

reader.Close();

· Thực hiện kiểm tra xem node hiện tại có attributes hay không, sử dụng thuộc tính HasAttributes, di chuyển đến attribute kế tiếp bằng phương thức MoveToNextAttribute, lấy ra tên attribute bằng thuộc tính Name và giá trị bằng thuộc tính Value

Ví dụ

public void DisplayAttributes(XmlReader reader)
{
    if (reader.HasAttributes)
    {
        Console.WriteLine("Attributes of <" + reader.Name + ">");
        while (reader.MoveToNextAttribute())
        {
            Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
        }
    }
}

· Thực hiện việc đọc một element bằng phương thức ReadStartElementReadEndElement

reader.Read();

reader.ReadStartElement(“book”);

reader.ReadStartElement(“author”);

Console.Write(“The content of the author element: “);

Console.WriteLine(reader.ReadString());

reader.ReadEndElement();

reader.ReadStartElement(“price”);

Console.Write(“The content of the price element: “);

Console.WriteLine(reader.ReadString());

reader.ReadEndElement();

reader.ReadEndElement();

Sử dụng XmlTextWriter để ghi dữ liệu ra tập tin XML

Thực hiện việc ghi theo đúng thứ tự bằng các phương thức

· WriteStartDocument

· WriteStartElement

· WriteStartAttribute

· WriteElementString

· WriteAttributeString

· WriteEndDocument

· WriteEndElement

· WriteEndAttribute

Ví dụ:

XmlTextWriter writer = null;

writer = new XmlTextWriter (“data.xml, null);

//Use indenting for readability.

writer.Formatting = Formatting.Indented;

//Write the XML delcaration.

writer.WriteStartDocument();

//Write the ProcessingInstruction node.

String PItext=”type=’text/xsl’ href=’book.xsl'”;

writer.WriteProcessingInstruction(“xml-stylesheet”, PItext);

//Write the DocumentType node.

writer.WriteDocType(“book”, null , null, “<!ENTITY h ‘hardcover’>”);

//Write a Comment node.

writer.WriteComment(“sample XML”);

//Write a root element.

writer.WriteStartElement(“book”);

//Write the genre attribute.

writer.WriteAttributeString(“genre”, “novel”);

//Write the title.

writer.WriteElementString(“title”, “The Handmaid’s Tale”);

//Write the style element.

writer.WriteStartElement(“style”);

writer.WriteEntityRef(“h”);

writer.WriteEndElement();

//Write the price.

writer.WriteElementString(“price”, “19.95”);

//Write CDATA.

writer.WriteCData(“Prices 15% off!!”);

//Write the close tag for the root element.

writer.WriteEndElement();

writer.WriteEndDocument();

//Write the XML to file and close the writer.

writer.Flush();

writer.Close();

2. Cách 2 : Sử dụng mô hình DOM (Document Object Model)

Sử dụng XmlDocument, XmlNode, XmlElement, XmlNodeList và thực hiện việc chọn node bằng biểu thức XPath.

ü Thực hiện việc load một tập tin XML bằng phương thức Load.

Ví dụ:

XmlDocument doc = new XmlDocument();

doc.Load(“data.xml”);

Phương thức Load đã thực hiện việc load tập tin XML vào trong XmlDocument

ü Để thực hiện ghi XmlDocument vào tập tin xml ta sử dụng phương thức Save, truyền vào một XmlTextWriter

Ví dụ:

XmlTextWriter writer = new XmlTextWriter(“data.xml”,null);

writer.Formatting = Formatting.Indented;

doc.Save(writer);

ü Truy xuất đến node gốc (root) bằng thuộc tính DocumentElement. DocumentElement có kiểu là XmlElement.

ü Trong một XmlElement sẽ có ChildNodes là các element con, Attributes là các attribute thành phần.

ü Tại một element có thể lấy ra tên và giá trị thông qua các thuộc tính NameValue

ü Để chọn ra các node thỏa một yêu cầu nào đó, ta sử dụng phương thức SelectNodes và truyền vào đó một biểu thức XPath, phương thức này sẽ trả ra một danh sách các node thỏa yêu cầu

Ví dụ:

XmlElement root = doc.DocumentElement;

XmlNodeList nodeList;

nodeList = root.SelectNodes(“/bookstore/book/@bk:ISBN”, nsmgr);

v Một số ví dụ về biểu thức XPath

Tìm tất cả element liên quan đến author trong node hiện tại.

./author

Tìm ra element author của node hiện tại

author

Tìm ra element book tại node gốc (root) của XmlDocument.

/book

Tìm ra node gốc của XmlDocument.

/*

Tìm ra tất cả elements liên quan đến author trong XmlDocument.

//author

Tìm ra sách có giá sử dụng phương thức thanh tóan là “dollar”.

/price[@format= “dollar”]

nvtam@fit.hcmuns.edu.vn

 
Leave a comment

Posted by on 06/05/2008 in XML

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: