system.xml.dll 어셈블리 안에 있다.)
System.Xml |
XML을 다루는 핵심 클래스 |
System.Xml.XPath |
XPath를 다룰수 있는 클래스들이 선언되어 있다. |
System.Xml.Schema |
Xml Schema 관련 클래스 |
System.Xml.Xsl |
XSLT 관련 클래스 |
2. XmlReader/XmlWriter 클래스
XmlReader |
스트림을 통해서 xml문서를 읽을 수 있는 메서드와 속성들이 있다.
(특징 : 빠른 순차접근,읽기전용커서) |
XmlWriter |
xml 문서로 저장하거나 스트림 형태로 보내는 메서드와 속성 제공. |
주의) 두 클래스는 추상 클래스이므로 반드시 Create() static메서드를 이용해 객체를 생성해야 한다.XmlReader는
StreamReader처럼 항상 한 방향으로만 순차 진행을 하기 때문에 뒤로 돌아 갈 수 없다.
예제1)
<?xml version="1.0" encoding="utf-8" ?> <booklist> <book id="b001" kind="컴퓨터"> <title>C#</title> <author>홍길동</author> <price unit="원">25000</price> </book> <book id="b002" kind="컴퓨터"> <title>XML.NET</title> <author>유재성</author> <price unit="달러">20000</price> </book> <book id="b003" kind="수필"> <title>무소유</title> <author>법정</author> <price unit="원">18000</price> </book> <book id="b004" kind="소설"> <title>무소뿔처럼 혼자서 가라</title> <author>홍길동</author> <price unit="원">15000</price> </book> </booklist> |
사용될 XSL문서이다. |
string uri = @"..\..\files\booklist.xml";
private void btnXmlReader_Click(object sender, EventArgs e) { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(uri,settings); while (reader.Read()) { Console.WriteLine("{0,-10}{1,-10}{2,-10}", reader.Name, reader.NodeType, reader.Value); } reader.Close(); } |

XmlReader객체를 Create()메서드를 사용해서 만들고 만든 객체의 Read()함수를 호출한다. 이 함수는 다음 노드로 움직이면서 읽을 노드가 있으면 true를 반환하고 없으면 false를 반환 한다.
while문 내부에서는 객체의 이름과, 노드 타입, 값을 출력한다.
끝에는 반드시 Close()로 닫아준다
|
예제2)
private void btnXmlReader02_Click(object sender, EventArgs e) { string xml = "<?xml version='1.0' encoding='utf-8' ?>"; xml += " <booklist>"; xml += "<book id='b001' kind='컴퓨터'>"; xml += "<title>C#</title>"; xml += "<author>홍길동</author>"; xml += "<price unit='원'>25000</price>"; xml += "</book>"; xml += " </booklist>";
StringReader sr = new StringReader (xml ); XmlReader reader = XmlReader.Create(sr); 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.DocumentType: Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value); break; case XmlNodeType.EntityReference: Console.Write(reader.Name); break; case XmlNodeType.EndElement: Console.Write("</{0}>", reader.Name); break; }
} reader.Close(); sr.Close(); }
|