XML DOM(문서 개체 모델)XML Document Object Model (DOM)

XML DOM(문서 개체 모델) 클래스는 XML 문서의 메모리 내 표현입니다.The XML Document Object Model (DOM) class is an in-memory representation of an XML document. DOM을 사용하여 XML 문서를 프로그래밍 방식으로 읽고, 조작하고, 수정할 수 있습니다.The DOM allows you to programmatically read, manipulate, and modify an XML document. XmlReader 클래스로도 XML을 읽을 수는 있지만, 이 클래스는 캐시되지 않은 정방향 전용 및 읽기 전용 액세스를 제공합니다.The XmlReader class also reads XML; however, it provides non-cached, forward-only, read-only access. 따라서 XmlReader로는 특성 값이나 요소의 내용을 편집할 수 없으며, 노드를 삽입하고 제거할 수도 없습니다.This means that there are no capabilities to edit the values of an attribute or content of an element, or the ability to insert and remove nodes with the XmlReader. 편집은 DOM의 기본 기능입니다.Editing is the primary function of the DOM. 실제 XML 데이터는 파일에 저장될 때나 다른 개체에서 읽어 올 때 순차적인 방식으로 저장되지만 XML 데이터를 메모리에 표현하는 것은 일반적이고 구조적인 방식으로 수행됩니다.It is the common and structured way that XML data is represented in memory, although the actual XML data is stored in a linear fashion when in a file or coming in from another object. 다음은 XML 데이터입니다.The following is XML data.

입력Input

<?xml version="1.0"?>  
  <books>  
    <book>  
        <author>Carson</author>  
        <price format="dollar">31.95</price>  
        <pubdate>05/01/2001</pubdate>  
    </book>  
    <pubinfo>  
        <publisher>MSPress</publisher>  
        <state>WA</state>  
    </pubinfo>  
  </books>   

다음 그림은 이 XML 데이터를 DOM 구조로 읽어올 때 메모리가 구조화되는 방법을 보여 줍니다.The following illustration shows how memory is structured when this XML data is read into the DOM structure.

XML 문서 구조XML document structure
XML 문서 구조XML document structure

XML 문서 구조에서 이 그림의 각 원은 XmlNode 개체라고 하는 노드를 나타냅니다.Within the XML document structure, each circle in this illustration represents a node, which is called an XmlNode object. XmlNode 개체는 DOM 트리에서 기본 개체입니다.The XmlNode object is the basic object in the DOM tree. XmlNode를 확장한 XmlDocument 클래스는 XML을 메모리에 로드하거나 파일로 저장하는 것처럼 문서 전체에 수행되는 메서드를 지원합니다.The XmlDocument class, which extends XmlNode, supports methods for performing operations on the document as a whole (for example, loading it into memory or saving the XML to a file. 또한 XmlDocument를 통해 전체 XML 문서의 노드를 보고 조작할 수도 있습니다.In addition, XmlDocument provides a means to view and manipulate the nodes in the entire XML document. XmlNodeXmlDocument에서는 모두 성능과 가용성이 향상되었고 다음 기능을 수행하는 메서드 및 속성을 제공합니다.Both XmlNode and XmlDocument have performance and usability enhancements and have methods and properties to:

  • 요소 노드, entityreference 노드 등과 같은 DOM 관련 노드 액세스 및 수정Access and modify nodes specific to the DOM, such as element nodes, entity reference nodes, and so on.

  • 전체 노드 검색과 요소 노드의 텍스트와 같이 노드가 포함하는 정보 검색Retrieve entire nodes, in addition to the information the node contains, such as the text in an element node.

    참고

    애플리케이션에 DOM이 제공하는 구조나 편집 기능이 필요하지 않은 경우 XmlReaderXmlWriter 클래스에서는 XML에 대한 캐시되지 않은 정방향 전용 스트림 액세스를 제공합니다.If an application does not require the structure or editing capabilities provided by the DOM, the XmlReader and XmlWriter classes provide non-cached, forward-only stream access to XML. 자세한 내용은 XmlReaderXmlWriter를 참조하세요.For more information, see XmlReader and XmlWriter.

Node 개체에는 일련의 메서드 및 속성뿐만 아니라 잘 정의된 기본적인 특성도 들어 있습니다.Node objects have a set of methods and properties, as well as basic and well-defined characteristics. 특성에는 다음이 포함됩니다.Some of these characteristics are:

  • 노드에는 하나의 부모 노드가 있습니다. 부모 노드는 해당 노드의 바로 위에 있는 노드입니다.Nodes have a single parent node, a parent node being a node directly above them. Document 루트는 문서 자체와 문서 조각을 포함하는 최상위 노드이므로 부모가 없는 유일한 노드입니다.The only nodes that do not have a parent is the Document root, as it is the top-level node and contains the document itself and document fragments.

  • 대부분의 노드에는 자식 노드, 즉 바로 아래에 있는 노드가 여러 개 있을 수 있습니다.Most nodes can have multiple child nodes, which are nodes directly below them. 다음은 자식 노드를 가질 수 있는 노드 형식의 목록입니다.The following is a list of node types that can have child nodes.

    • DocumentDocument

    • DocumentFragmentDocumentFragment

    • EntityReferenceEntityReference

    • 요소Element

    • 특성Attribute

    XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstructionDocumentType 노드에는 자식 노드가 없습니다.The XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction, and DocumentType nodes do not have child nodes.

  • 다이어그램에 표시된 bookpubinfo 노드와 같이 동일한 수준의 노드는 형제 관계입니다.Nodes that are at the same level, represented in the diagram by the book and pubinfo nodes, are siblings.

특성 처리 방법은 DOM의 특징 중 하나입니다.One characteristic of the DOM is how it handles attributes. 특성은 부모-자식 및 형제 관계에 있는 노드가 아닙니다.Attributes are not nodes that are part of the parent, child, and sibling relationships. 특성은 요소 노드의 속성으로 간주되며 이름 및 값 쌍으로 구성됩니다.Attributes are considered a property of the element node and are made up of a name and a value pair. 예를 들어, format="dollar 요소와 연관된 price"로 구성되는 XML 데이터의 경우 format이라는 단어는 이름이고 format 특성의 값은 dollar입니다.For example, if you have XML data consisting of format="dollar" associated with the element price, the word format is the name, and the value of the format attribute is dollar. price 노드의 format="dollar" 특성을 검색하려면 커서가 price 요소 노드에 있을 때 GetAttribute 메서드를 호출합니다.To retrieve the format="dollar" attribute of the price node, you call the GetAttribute method when the cursor is located at the price element node. 자세한 내용은 DOM에서 특성 액세스를 참조하세요.For more information, see Accessing Attributes in the DOM.

노드는 XML을 메모리로 읽어올 때 만들어집니다.As XML is read into memory, nodes are created. 그러나 모든 노드가 동일한 형식은 아닙니다.However, not all nodes are the same type. XML의 요소에는 처리 명령 대신 다양한 규칙과 구문이 있습니다.An element in XML has different rules and syntax than a processing instruction. 따라서 다양한 데이터를 읽을 때 각 노드에 노드 형식이 지정됩니다.Therefore, as various data is read, a node type is assigned to each node. 이 노드 형식은 해당 노드의 특징 및 기능을 결정합니다.This node type determines the characteristics and functionality of the node.

메모리에 생성되는 노드 형식에 대한 자세한 내용은 XML 노드 형식을 참조하세요.For more information on the types of nodes generated in memory, see Types of XML Nodes. 노드 트리에 생성되는 개체에 대한 자세한 내용은 XML 데이터에 개체 계층 구조 매핑을 참조하세요.For more information on the objects created in the node tree, see Mapping the Object Hierarchy to XML Data.

Microsoft는 XML 문서 작업을 손쉽게 수행할 수 있도록 W3C(World Wide Web 컨소시엄) DOM Level 1 및 Level 2에서 사용할 수 있는 API를 확장했습니다.Microsoft has extended the APIs that are available in the World Wide Web Consortium (W3C) DOM Level 1 and Level 2 to make it easier to work with an XML document. W3C 표준을 완전하게 지원하는 동시에 추가 클래스, 메서드 및 속성으로 W3C XML DOM을 사용하여 수행할 수 있는 것 이상의 기능을 제공합니다.While fully supporting the W3C standards, the additional classes, methods, and properties add functionality beyond what can be done using the W3C XML DOM. 새 클래스를 사용하면 관계형 데이터에 액세스할 수 있어 ADO.NET 데이터와 동기화하는 동시에 데이터를 XML로 표현하는 메서드가 제공됩니다.New classes enable you to access relational data, giving you methods for synchronizing with ADO.NET data, simultaneously exposing data as XML. 자세한 내용은 XmlDataDocument로 데이터 세트 동기화를 참조하세요.For more information, see Synchronizing a DataSet with an XmlDataDocument.

DOM은 XML 데이터를 메모리로 읽어와 구조를 변경하고, 노드를 추가하거나 제거하며, 요소에 들어 있는 텍스트에 포함된 노드의 데이터를 수정할 경우에 매우 유용합니다.The DOM is most useful for reading XML data into memory to change its structure, to add or remove nodes, or to modify the data held by a node as in the text contained by an element. 그러나 그 밖의 상황에서는 DOM보다 더 빠른 다른 클래스를 사용할 수 있습니다.However, other classes are available that are faster than the DOM in other scenarios. XML에 대한 캐시되지 않은 정방향 전용 고속 스트림 액세스의 경우 XmlReaderXmlWriter를 사용하세요.For fast, non-cached, forward-only stream access to XML, use the XmlReader and XmlWriter. 커서 모델 및 XPath를 사용한 임의 액세스가 필요한 경우에는 XPathNavigator 클래스를 사용하세요.If you need random access with a cursor model and XPath, use the XPathNavigator class.

참고 항목See also