1 / 17

Đọc và tạo tài liệu XML

Đọc và tạo tài liệu XML. ThS. Trần Minh Triết. Giới thiệu. XmlReader và XmlWriter là 2 lớp ảo quan trọng nhất trong mô hình đối tượng XML của .NET Framework. XmlReader cung cấp các API để đọc tài liệu XML XmlWriter cung cấp các API để tạo ra các tài XML theo chuẩn của W3C

casper
Download Presentation

Đọc và tạo tài liệu XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Đọc và tạo tài liệu XML ThS. Trần Minh Triết

  2. Giới thiệu • XmlReader và XmlWriter là 2 lớp ảo quan trọng nhất trong mô hình đối tượng XML của .NET Framework. • XmlReader cung cấp các API để đọc tài liệu XML • XmlWriter cung cấp các API để tạo ra các tài XML theo chuẩn của W3C • Microsoft áp dụng kết hợp ý tưởng của DOM và SAX trong việc thiết kế và xây dựng 2 lớp này • XmlReader và XmlWriter sử dụng mô hình stream để đọc/ghi từng phần của tài liệu XML

  3. Sử dụng XmlReader và XmlWriter • Do XmlReader và XmlWriter đều là abstract class nên khi sử dụng, cần phải dùng các lớp cụ thể kế thừa từ các lớp này • Sử dụng các lớp XmlTextReader, XmlNodeReader hay XslReaderkế thừa từ XmlReader • Sử dụng XmlTextWriter hay XmlNodeWriter kế thừa từ XmlWriter

  4. XmlReader • Lớp XmlReader: • Abstract class • Cung cấp chức năng đọc (read-only và forward-only) trên tài liệu XML. • Việc sử dụng XmlReader rất giống với DOM, cho phép đọc và xử lý lần lượt từng node

  5. XmlReader • Ví dụ: đọc và duyệt qua từng node của tài liệu XML và xuất tên của các element trong tài liệu publicvoidDisplayElements( XmlReader reader ) { /* read the next node in document order */ while ( reader.Read() ) { /* if this is an element node, display its name */ Console.WriteLine( reader.Name ); } }

  6. XmlReader • XmlReader sử dụng một cursor để xác định node hiện tại đang được xử lý trong stream tài liệu • Các phương thức được cung cấp cho phép có thể duyệt qua lần lượt từng node theo chiều tiến (forward-only) • XmlReader cung cấp một số hàm để thao tác trên kiểu và giá trị của node hiện tại

  7. Đọc các node • Phương thức Read( ) là phương thức cơ sở của XmlReader để di chuyển cursor trong tài liệu XML • Mỗi lần gọi hàm Read( ), XmlReader sẽ di chuyển cursor sang node tiếp theo trong tài liệu cho đến khi hết stream • Khi hết stream, Read( ) sẽ trả về giá trị False.

  8. Ví dụ <persons> <person> <firstname>Albert</firstname> <lastname>Einstein</lastname> </person> <person> <firstname>Niels</firstname> <lastname>Bohr</lastname> </person> </persons> persons person firstname firstname lastname lastname person person firstname firstname lastname lastname person persons while ( reader.Read() ) { /* if this is an element node, display its name */ Console.WriteLine( reader.Name ); }

  9. Thông tin của node • Với mỗi node đang được đọc, có thể lấy thông tin về giá trị và các thông tin liên quan đến node đó • Ví dụ: • Thuộc tính NodeType trả về kiểu node (tương tự DOM) • Thuộc tính Valuetrả về giá trị của node • XmlReader cung cấp các hàm trả về giá trị theo từng kiểu dữ liệu cụ thể (ReadInt16, ReadDouble, ReadString, …)

  10. Ví dụ publicvoidDisplayNode( XmlReader node ) { switch ( node.NodeType ) { caseXmlNodeType.Element: Console.Write( "<" + node.Name + ">" ); break; caseXmlNodeType.Text: Console.Write( node.Value ); break; caseXmlNodeType.CDATA: Console.Write( node.Value ); break; caseXmlNodeType.ProcessingInstruction: Console.Write( "< "+node.Name+" "+node.Value+" >" ); break;

  11. Ví dụ caseXmlNodeType.Comment: Console.Write( "<!--" + node.Value + "-->" ); break; caseXmlNodeType.Document: Console.Write( "< xml version='1.0' >" ); break; caseXmlNodeType.Whitespace: Console.Write( node.Value ); break; caseXmlNodeType.SignificantWhitespace: Console.Write( node.Value ); break; caseXmlNodeType.EndTag: Console.Write( "</" + node.Name + ">" ); break; } }

  12. Đọc các Attribute • Attribute là thành phần bên trong của element nên hàm Read( ) KHÔNG duyệt vào các node attribute!!! • Để truy cập các attribute của element hiện tại, sử dụng hàm GetAttribute( ). • Trong GetAttribute( ), có thể truy cập các attribute theo tên hay chỉ số • Ví dụ: for ( int = 0; i < node.AttributeCount; i++ ) { Console.WriteLine( node.GetAttribute( i ) ); }

  13. Đọc các Attribute • XmlReader cung cấp các hàm để duyệt qua các attribute của node hiện tại. • MoveToAttribute( ) • MoveToFirstAttribute( ) • MoveToNextAttribute( ) • Ví dụ: while ( node.MoveToNextAttribute() ) { Console.Write( " " + node.Name + "=\""+node.Value+"\"" ); }

  14. XmlWriter • XmlWriter là abstract class cho phép tạo ra stream tài liệu theo định dạng XML của W3C • XmlWriter hỗ trợ việc tạo tài liệu XML tự động, ví dụ như đảm bảo việc đóng các tag của element đầy đủ, các giá trị của attribute được ghi nháy kép đầy đủ… • XmlWriter cung cấp các hàm để ghi dữ liệu có kiểu cụ thể (như WriteInt32( ), WriteDouble( ), WriteString( )…).

  15. XmlWriter publicstaticvoidMain( String[] args ) { /* Instantiates an XmlTextWriter that writes to the console */ XmlTextWriter writer = newXmlTextWriter( Console.Out ); /* Use indenting for readability */ writer.Formatting = Formatting.Indented; writer.Indentation = 4;

  16. XmlWriter /* Now write out our XML document */ writer.WriteStartDocument(); writer.WriteStartElement( "Persons" ); writer.WriteStartElement( "Person" ); writer.WriteStartElement( "Name" ); writer.WriteStartAttribute( null, "firstName", null ); writer.WriteString( "Albert" ); writer.WriteEndAttribute(); writer.WriteStartAttribute( null, "lastName", null ); writer.WriteString( "Einstein" ); writer.WriteEndAttribute(); writer.WriteEndElement(); writer.WriteEndElement();

  17. XmlWriter writer.WriteStartElement( "Person" ); writer.WriteStartElement( "Name" ); writer.WriteStartAttribute( null, "firstName", null ); writer.WriteString( "Niels" ); writer.WriteEndAttribute(); writer.WriteStartAttribute( null, "lastName", null ); writer.WriteString( "Bohr" ); writer.WriteEndAttribute(); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); /* Don't forget to close the writer */ writer.Close(); }

More Related