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();
}

 

 

+ Recent posts