사용될 XML문서

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
<!--<writer>사람</writer>-->
</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>

 

 

 

 

 

 

책제목 가져오기

 

private void btnXmlReader05_Click(object sender, EventArgs e)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(this.uri, settings);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&

reader.Name == "title")
{
//그 다음의 노드의 Value값을 출력
//reader.Read();//코딩으로 다음 노드로 이동
//Console.WriteLine("책 제목 : {0}",reader.Value);

//ReadElementString(); 위에 코딩을 한줄로~
Console.WriteLine("책 제목 : {0}",

reader.ReadElementString());
}
}
reader.Close();
}

NodeType이 Element이고 그 엘리먼트의 이름이 title인 노드의 값(Value)를 출력한다.

주석있는 부분은 3줄 코딩이 필요하지만

ReadElementString()를 이용하면 한줄로 작성 가능하다.

개념만 알고 있다면 둘다 좋은 코딩이니 선택해서 하면 되겠다.

 

실행결과

 

 

 

 

 

 

 

 

해당 엘리먼트노드의 속성 노드 값 출력하기

 

 

private void button1_Click(object sender, EventArgs e)
{
XmlReaderSettings setting = new XmlReaderSettings();
setting.IgnoreWhitespace = true;
setting.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(this.uri, setting);
while (reader.Read())
{
if (reader.HasAttributes && reader.Name == "book" &&

reader.NodeType==XmlNodeType.Element)
{
while (reader.MoveToNextAttribute())
{
Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
}

}
}
}

속성을 가지고 있는 엘리먼트 타입의 book인 노드를 선별하고

다시 while문에서 MoveToNextAttribute()를 사용해서 속성들이 있다면 첫번째 속성으로 이동한다. 또 다른 속성이 있다면 while 문에서 MoveToNextAttribute()함수가 다음 속성을 가리키게 되며 다음 속성이 없다면 false값을 반환하여 while문을 빠져나온다.

실행결과

 

+ Recent posts