태그명으로 찾기

GetElementsByTagName("찾을태그네임")

XmlDocument(루트노드(문서자체))객체에서도 되고 XmlElement객체에서도 가능한 함수이며,

현제위치에서 '찾을태그네임'과 일치 하는 모든 하위 노드를 가져와 XmlNodeList를 반환 한다.

이거 javascript에서 썼던 함수와 이름과 인자가 완전히 일치하는것을 느꼈는가?

잘 모르겠다면 javascript편을 하나하나 훝어 보시길...

 

그런데 이함수의 용법을 보려고 MSDN에 갔더니 아래처럼 말한다.-_-;;;

참고에 나오는 방법은 다음 정리중에서 할것이니 일단은 GetElementsByTagName()를 사용해보겠다.

예제에서 가져온 하위 노드들을 가지고 같은 출력 다른 코딩을 해봤다.

예제는 booklist.xml에서 book의 모든 자식 title태그의 값 즉 모든 책제목을 출력하는 것이다.

(코딩은 간결하게 하기 귀찮아 붙여넣기 반복했다. 가독성은 좋다..... -_-;;)

 

예제에 쓰일 boolist.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>
</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>

 

public string pathURI=@"..\..\files\booklist.xml";

XmlDocument doc = new XmlDocument();
doc.Load(pathURI);

XmlNodeList titles= doc.GetElementsByTagName("title");

for (int i = 0; i < titles.Count; i++)
{
string disp= string.Format("titles[{0}].ChildNodes[0].value=

{1,-20}",i,titles[i].ChildNodes[0].Value);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
string disp = string.Format("titles[{0}].ChildNodes[0].InnerText={1,-20}", i, titles[i].ChildNodes[0].InnerText);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
XmlNode titleText = titles[i].ChildNodes[0];
string disp = string.Format("titleText.Value={0,-20}",titleText.Value);
Console.WriteLine(disp);
}

for (int i = 0; i < titles.Count; i++)
{
XmlNode titleText = titles[i].ChildNodes[0];
string disp = string.Format("titleText.InnerText={0,-20}", titleText.InnerText);
Console.WriteLine(disp);
}

 

 

 

 

 

출력결과

이것 외에도 똑같은 값을 다르게 출력할 수 있는 방법이 있으나 이정도면 자주쓰는 것이므로 여기서 정리하겠다.

 

 

ID로 해당 엘리먼트 가져오기

GetElementById("찾을ID")

'찾을ID'에 해당하는 XmlElement 객체를 반환한다.반환형은 XmlElement이다.

위의 함수와 비슷한 용법처럼 보이나 이 함수는 XmlDocumnet(루트노드(문서자체))에서만 가능하다. 그리고 위 함수 처럼

리스트를 가져오는 것이 아니라 XmlElement객체 하나만을 가져온다.(당연히 ID값은 유일하니까...)

 

 

예제) ID값이 b002인 책이름 가져오기

public string pathURI=@"..\..\files\booklist.xml";

XmlDocument doc = new XmlDocument();
doc.Load(pathURI);

XmlElement rootElet = doc.DocumentElement;
XmlNodeList childs = rootElet.ChildNodes;
XmlElement book = doc.GetElementById("b002");
Console.WriteLine(book.ChildNodes[0].InnerText);

b002인 ID를 갖는 엘리먼트를 book에 담고 그 book의

자식노드집합중에 첫번 째 노드 즉 Text엘리먼트의 InnerText를 출력한다. 값을 출력하는 방법은 여러가지가 있다는 것은 위에서 언급했으니 왜 이걸했냐고 묻지 말것~...

출력결과)

+ Recent posts