XML 문서가 메모리에 있는 경우 개념적 표현은 트리입니다. 프로그래밍의 경우 트리의 노드에 액세스할 수 있는 개체 계층 구조가 있습니다. 다음 예제에서는 XML 콘텐츠가 노드가 되는 방법을 보여 줍니다.
XML이 XML DOM(문서 개체 모델)에 읽혀질 때 조각은 노드로 변환되고 이러한 노드는 노드 형식 및 값과 같은 자체에 대한 추가 메타데이터를 유지합니다. 노드 형식은 해당 개체이며 수행할 수 있는 작업과 설정하거나 검색할 수 있는 속성을 결정합니다.
다음과 같은 간단한 XML이 있는 경우:
입력
<book>
<title>The Handmaid's Tale</title>
</book>
입력은 할당된 노드 형식 속성을 사용하여 다음 노드 트리로 메모리에 표시됩니다.
책과 제목의 노드 트리 표현
요소는 book
XmlElement 개체가 되고, 다음 요소는 title
XmlElement가 되고, 요소 콘텐츠는 XmlText 개체가 됩니다.
XmlElement 메서드 및 속성을 살펴보면 메서드와 속성은 XmlText 개체에서 사용할 수 있는 메서드 및 속성과 다릅니다. 따라서 노드 형식에 따라 수행할 수 있는 작업이 결정되므로 XML 태그가 어떤 노드 형식인지 아는 것이 중요합니다.
다음 예제에서는 XML 데이터를 읽고 노드 유형에 따라 다른 텍스트를 씁니다. 다음 XML 데이터 파일을 입력으로 사용하여 items.xml.
입력
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
다음 코드 예제에서는 items.xml 파일을 읽고 각 노드 형식에 대한 정보를 표시합니다.
Imports System
Imports System.IO
Imports System.Xml
Public Class Sample
Private Const filename As String = "items.xml"
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
' Load the reader with the data file and
'ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None
' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)
Case XmlNodeType.Text
Console.Write(reader.Value)
Case XmlNodeType.CDATA
Console.Write("<![CDATA[{0}]]>", reader.Value)
Case XmlNodeType.ProcessingInstruction
Console.Write("<?{0} {1}?>", reader.Name, reader.Value)
Case XmlNodeType.Comment
Console.Write("<!--{0}-->", reader.Value)
Case XmlNodeType.XmlDeclaration
Console.Write("<?xml version='1.0'?>")
Case XmlNodeType.Document
Case XmlNodeType.DocumentType
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
Case XmlNodeType.EntityReference
Console.Write(reader.Name)
Case XmlNodeType.EndElement
Console.Write("</{0}>", reader.Name)
End Select
End While
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub 'Main ' End class
End Class 'Sample
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
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;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
예제의 출력은 노드 형식에 대한 데이터의 매핑을 표시합니다.
출력
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
입력을 한 번에 한 줄씩 사용하고 코드에서 생성된 출력을 사용하여 다음 표를 사용하여 출력 줄을 생성한 노드 테스트를 분석하여 어떤 XML 데이터가 어떤 종류의 노드 형식이 되었는지 이해할 수 있습니다.
입력 | 출력 | 노드 유형 테스트 |
---|---|---|
<?xml version="1.0"?> | <?xml version='1.0'?> | XmlNodeType.XmlDeclaration |
<-- 샘플 XML 문서입니다.> | <--이 예제 XML 문서입니다.> | XmlNodeType.Comment |
<!DOCTYPE 항목 [<!ENTITY 번호 "123">]> | <!DOCTYPE 항목 [<!ENTITY 번호 "123">] | XmlNodeType.DocumentType |
<항목> | <항목> | XML 노드 유형: 요소 |
<항목> | <항목> | XML 노드 유형: 요소 |
엔터티로 테스트: &number; | 엔터티로 테스트: 123 | XmlNodeType.Text (텍스트 노드 유형) |
</항목> | </항목> | XmlNodeType.EndElement |
<항목> | <항목> | XmNodeType.Element |
자식 요소를 사용하여 테스트 | 자식 요소를 사용하여 테스트 | XmlNodeType.Text (텍스트 노드 유형) |
<더> | <더> | XML 노드 유형: 요소 |
물건 | 물건 | XmlNodeType.Text (텍스트 노드 유형) |
</항목> | </항목> | XmlNodeType.EndElement |
<항목> | <항목> | XML 노드 유형: 요소 |
CDATA 섹션을 사용하여 테스트 | CDATA 섹션을 사용하여 테스트 | XmlTest.Text |
<! [CDATA[<456>]]> | <! [CDATA[<456>]]> | XmlTest.CDATA |
def | def | XmlNodeType.Text (텍스트 노드 유형) |
</항목> | </항목> | XmlNodeType.EndElement |
<항목> | <항목> | XML 노드 유형: 요소 |
char 엔터티로 테스트: A | char 엔터티를 사용하여 테스트: A | XmlNodeType.Text (텍스트 노드 유형) |
</항목> | </항목> | XmlNodeType.EndElement |
<이 요소에 14개의 문자를 --.> | <--이 요소에 있는 14개의 문자입니다.--> | XmlNodeType.Comment |
<항목> | <항목> | XML 노드 유형: 요소 |
1234567890ABCD | 1234567890ABCD | XmlNodeType.Text (텍스트 노드 유형) |
</항목> | </항목> | XmlNodeType.EndElement |
</항목> | </항목> | XmlNodeType.EndElement |
노드 형식이 유효한 작업의 종류와 설정하고 검색할 수 있는 속성 종류를 제어하므로 어떤 노드 형식이 할당되었는지 알고 있어야 합니다.
공백에 대한 노드 생성은 PreserveWhitespace 플래그에 의해 데이터가 DOM에 로드될 때 제어됩니다. 자세한 내용은 DOM을 로드할 때 공백 및 중요한 공백 처리를 참조하세요.
DOM에 새 노드를 추가하려면 XML 문서에 노드 삽입을 참조하세요. DOM에서 노드를 제거하려면 XML 문서에서 노드, 콘텐츠 및 값 제거를 참조하세요. DOM에서 노드의 콘텐츠를 수정하려면 XML 문서에서 노드, 콘텐츠 및 값 수정을 참조하세요.
참고하십시오
.NET