Programming/.NET

 

 1. NameTable

 

NameTable은 XML요소를 개체참조형식으로 담아두는데 사용됩니다. 예를 들어 XML데이터를 순회하면서 다음과 같이 특정 요소를 문자열로 비교해서 처리해야 하는 경우라면

 

if (reader.NodeType == XmlNodeType.Element && reader.LocalName.Trim() == "title") {

 대신 NameTable 클래스를 사용하여 비교자체를 개체참조 형태로 대신할 수 있습니다. 이것은 단순히 문자열을 비교하는 것보다 일정이상 성능향상을 기대할 수 있게 합니다.

 

string xml_file = Server.MapPath("books.xml");
string xml_schema = Server.MapPath("books.xsd");

XmlReaderSettings xrs = new XmlReaderSettings();
xrs.IgnoreComments = true;
xrs.IgnoreWhitespace = true;

xrs.Schemas.Add(null, xml_schema);
xrs.ValidationType = ValidationType.Schema;
xrs.ValidationFlags = System.Xml.Schema.XmlSchemaValidationFlags.ReportValidationWarnings;
xrs.ValidationEventHandler += xrs_ValidationEventHandler;

NameTable nt = new NameTable();
object book = nt.Add("title");

xrs.NameTable = nt;

using (XmlReader reader = XmlReader.Create(xml_file, xrs)) {
    while (reader.Read()) {
        if (reader.NodeType == XmlNodeType.Element && book.Equals(reader.LocalName)) {
            while (reader.Read()) {
                if (reader.NodeType == XmlNodeType.Text) {
                    Response.Write(reader.Value + "<br />");
                    break;
                }
            }
        }
    }
}

▶ ex 1-1

 

NameTable 클래스에서 특정 객체를 생성한 다음 Add메소드를 호출하여 XML요소인 title 추가를 시도합니다. Add 메소드는 XML요소의 title과 동일한 title 개체참조를 반환하게 되고 Equals메소드를 통해 두개체의 동일성을 확인하게 되는 것입니다.

 

작은 XML의 경우에는 모르지만 대용량일 수록 성능향상을 기대할 수 있습니다. 게다가 NameTable은 다른 XML개체에서 재사용이 가능합니다.

 

 2. 데이터타입 변환

 

XML을 파싱할때 특정 데이터타입으로 XML요소의 값을 가져와야 하는 경우라면 XmlReader 클래스 개체에서 ReadElementContentAsXXX 형태의 메소드를 사용하면 됩니다. 예를 들어 이전 1-1 예제에서는 XML값을 가져오기 위해 reader.Value 처름 사용했다면 이것을 다음과 같이 바꿀 수도 있습니다.

 

Response.Write(reader.ReadElementContentAsString() + "<br />");

예제는 값을 String 테이터타입 형식으로 가져오지만 만일 정수나 기타 숫자를 통해 합계등을 구해야 하는 경우라고 가정할때

 

int.Parse(reader.Value)

기존에 위와 같이 형변환등을 수행했다면 대신 ReadElementContentAsInt() 메소드로 정수형태의 값을 가져오는 것입니다.

 

int i = reader.ReadElementContentAsInt()

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] XML - 4  (0) 2016.02.11
[ASP.NET] XML - 3  (0) 2016.02.01
[ASP.NET] XML - 2  (0) 2016.01.26
[ASP.NET] XML - 1  (0) 2016.01.18
[ASP.NET] Command Object  (0) 2016.01.13
[ASP.NET] DLL 교체 시 웹서비스 지연현상  (0) 2015.08.07
0 0