백엔드 개발 XML/RSS 튜토리얼 XML 파일 읽기를 위한 XMLTextReader와 XmlDocument 비교

XML 파일 읽기를 위한 XMLTextReader와 XmlDocument 비교

Feb 28, 2017 pm 04:29 PM

인터넷에서 기사를 보고 직접 시도해 보았는데 역시 xmlTextReader가 더 빠릅니다!

.NET Framework의 System.XML 네임스페이스에 포함된 XMLTextReader 클래스는 많은 시스템 리소스를 요구하지 않고도 XML 파일에서 데이터를 빠르게 읽을 수 있습니다. XMLTextReader 클래스를 사용하여 XML 파일에서 데이터를 읽고 브라우저에 출력할 수 있도록 HTML 형식으로 변환합니다.

이 기사를 읽기 전에 독자는 XML, HTML, C# 프로그래밍 언어와 같은 몇 가지 기본 지식과 .NET, 특히 asp.net 프레임워크에 대한 지식을 이해해야 합니다.

Microsoft의 .NET 프레임워크는 개발자에게 다양한 개발 편의성을 제공합니다. XML의 중요성이 계속해서 커짐에 따라 개발자는 강력한 XML 도구 전체 세트의 개발을 기대하고 있습니다. .NET 프레임워크는 우리의 기대에 부응하고 System.XML 네임스페이스에서 XML에 대해 다음 클래스를 구성했습니다.

XMLTextReader------버퍼되지 않은 방식으로 빠른 단방향 Access XML 데이터를 제공합니다. 방법. (단방향은 XML 파일을 앞에서 뒤로만 읽을 수 있고 역방향으로는 읽을 수 없음을 의미합니다.)

XMLValidatingReader------XMLTextReader 클래스와 함께 사용되며 DTD, XDR 및 XSD의 유효성 검사를 제공합니다. 스키마 능력.

XMLDocument------W3C 문서 개체 모델 사양의 기본 및 보조 표준을 따라 XML 데이터에 대한 무작위 및 캐시 액세스를 달성합니다. 첫 번째 수준에는 DOM의 가장 기본적인 부분이 포함되어 있고, 두 번째 수준에는 네임스페이스 및 계단식 다이어그램(CSS)에 대한 추가 지원을 포함하여 다양한 개선 사항이 추가되었습니다.

XMLTextWriter------W3C XML 1.0 사양을 준수하는 XML 파일을 생성합니다.

이 기사에서는 주로 첫 번째 클래스 XMLTextReader에 대해 설명합니다. 이 클래스의 목적은 높은 시스템 리소스(주로 메모리 및 프로세서 시간 요구 사항 포함)를 요구하지 않고 XML 파일에서 데이터를 빠르게 읽는 것입니다. 상위 프로그램의 제어 하에 한 번에 하나의 노드만 처리하여 XML 파일을 점진적으로 작동함으로써 이 작업 프로세스를 구현합니다. XML 파일의 각 노드에서 상위 프로그램은 노드 유형, 해당 속성 및 데이터(있는 경우), 노드에 대한 기타 정보를 확인할 수 있습니다. 이 정보를 기반으로 상위 프로그램은 다양한 애플리케이션 요청의 요구 사항을 충족하기 위해 이 노드를 처리할지 아니면 노드 정보를 무시할지 선택할 수 있습니다. 상위 프로그램이 요청을 하고 XML 파일에서 개별 노드를 추출한 다음 필요에 따라 이를 처리하거나 처리하지 않기 때문에 이를 풀 처리 모델이라고 합니다.
XMLTextReader 클래스를 프로그래머들 사이에서 매우 인기 있는 XML 데이터 읽기를 위한 또 다른 기술인 XML 단순 응용 프로그래밍 인터페이스(SAX)와 비교할 수 있습니다. XMLTextReader와 SAX는 많은 시스템 리소스를 차지하지 않고 XML 파일에서 데이터를 빠르게 읽을 수 있다는 점에서 매우 유사합니다. 그러나 XMLTextReader의 추출 모델과 달리 SAX는 푸시 모델을 사용합니다. XML 프로세서는 "이벤트"를 사용하여 호스트 애플리케이션에 어떤 노드 데이터가 사용 가능하고 어떤 데이터는 필요에 따라 얻을 수 없는지 알리고, 호스트 프로그램은 이에 따라 반응하거나 무시합니다. . 즉, 데이터가 SAX 핸들러에서 호스트로 푸시됩니다. 프로그래머들은 풀아웃 처리 모델과 푸시인 처리 모델 중 어느 쪽이 더 장점이 있는지 논쟁을 벌이게 되지만, 두 모델 모두 잘 작동한다는 점은 부인할 수 없습니다. .NET Framework는 SAX를 지원하지 않지만 MSXML 파서와 같은 기존 SAX 도구를 .NET 애플리케이션에서 사용할 수 있습니다.

XMLTextReader 클래스에는 기존 데이터 스트림이나 URL(Uniform Resource Locator)에서 데이터를 읽는 등 다양한 상황을 수용할 수 있는 생성자가 있습니다. 가장 일반적으로 파일에서 XML 데이터를 읽으려고 할 수 있으며 이를 제공하는 해당 생성자가 있습니다. 여기에 예가 있습니다. 모든 코드 예는 C#으로 되어 있으며 VISUAL BASIC을 사용하려는 경우 쉽게 변환할 수 있습니다.

XMLTextReader myReader;
myReader = New XMLTextReader("c:\data\sales.XML")
로그인 후 복사

Read() 메서드라는 루프를 만듭니다. 이 메서드의 반환 값은 반환 값이 false가 될 때 파일의 맨 아래에 도달할 때까지 항상 true입니다. 즉, 루프는 파일 시작 부분에서 시작하여 파일 끝에 도달할 때까지 한 번에 하나씩 모든 노드를 읽습니다.

While (myReader.Read()) {
...
// 在这里处理每个节点.
...
}
로그인 후 복사

Read()를 성공적으로 호출할 때마다 XMLTextReader 인스턴스화기 현재 노드(파일에서 방금 읽은 노드)에 대한 정보를 포함합니다. 표 1에 설명된 대로 XMLTextReader의 멤버로부터 위의 정보를 얻을 수 있으며 NodeType 속성을 통해 현재 노드의 유형을 결정할 수 있습니다. 프로그램 코드는 노드 유형에 따라 노드 데이터를 읽고 속성이 있는지 여부를 확인하며 이를 무시할지 또는 프로그램의 필요에 따라 해당 작업 및 처리를 수행할지 여부를 확인할 수 있습니다.

NodeType 속성을 사용할 때 노드가 XML 단위와 어떻게 관련되어 있는지 이해하는 것이 중요합니다. 예를 들어 다음 XML 요소를 살펴보세요.

<city>Chongqing</city>
로그인 후 복사

XMLtextReader는 이 요소를 다음 순서대로 3개의 노드로 처리합니다.

1. 태그는 XMLNodeType.Element 유형의 노드로 읽혀지며 "city" 요소의 이름은 XMLTextReader의 Name 속성에서 얻을 수 있습니다.

  2.文本数据“Chongqing”被读为类型为XMLNodeType.Text的节点。数据“Chongqing ” 可从XMLTextReader 的Value属性中取得。

  3.</city>标签被读为类型为XMLNodeType.EndElement 节点。同样,元素的名称“city”可从XMLTextReader的Name属性中获得。

  这是 3 种重要的节点类型,其它的类型在.NET的说明文档中有详细说明,请大家参阅相关资料。

  如果XMLTextReader遇到一个错误, 例如出现违反XML句法的情况,它抛出一个System.XML.XMLException类型的异常。使用这个类的代码应该总是被保护 ( 在Try……Catch块中),就像你以后在演示程序中看到的一样。
  本文只是一篇相当简单的介绍XMLTextReader 类的文章,XMLTextReader类有相当多的成员,在这里不可能一一述及。当读入XML数据时,XMLTextReader能提供相当强的灵活性。即便如此,我仍然进行了大量的论述,以保证读者能编制程序来实现现实世界中经常要求完成的任务,也就是从一个XML文件读取数据然后以HTML的格式输出,从而实现在浏览器中的显示。

  这个ASP.NET程序(脚本)在服务器上运行并产生一个HTML页面返回浏览器。这段脚本程序在代码段 1 给出,它用来工作使用的 XML 数据文件在代码段 2给出。你能看到这个 XML 文件包含一份表示联系关系的列表;程序的目标即是将这个列表显示出来,为了更容易我们观察,这些列表已经被格式化了。

  运行程序:

  1. 将代码段1存为XMLTextReader.ASPx文件,将代码段2存为XMLData.XML文件。

  2. 把这两个文件都放在一个已经安装好.NET 框架的网络服务器的虚拟文件夹中。

  3. 打开 Internet Explorer 并且浏览这个ASPx文件,例如,在一个局域网服务器上, URL 将是 http://localhost/xmltextreader.ASPx ;。

  程序工作的大部分都由XMLDisplay 类来做,尤其是被PRocessXML()方法完成的。它每次读取一个节点XML数据,对于感兴趣的元素,节点数据和后跟冒号的节点名将和相应的HTML格式化标签一起写入输出结果中。在这阶段,“输出结果”由一个HTML文本暂时储存在其中的StringBuilder对象构成。

  ProcessXML()方法是从LoadDocument()方法调用的。这个方法执行的任务是产生一个XMLTextReader实例化程序并在调用ProcessXML之前装载XML文件。它同时也处理异常,随后产生错误的信息并在浏览器中显示出来。最终该方法返回一个字符串,这个字符串或者包含产生的HTML内容,或者如果异常发生的话就包含出错信息,。

  程序执行以Page_Load()程序开始,当浏览器请求浏览这个页面时,这一步会自动执行。这里的代码实例化了XMLDisplay 类并调用它的LoadDocument()方法。如果一切运行正常的话,格式化的HTML形式的返回值将被拷贝到页面的一个<div>标签中,生成的HTML文档被送回到浏览器中并显示出来。

  其他的.NET 框架的类,比如XMLDocument类在读取XML数据方面表现如何呢?XMLDocument 类与XMLTextReader 类不同,它在存储器中创建整个XML文档的节点树。这样就可以随机的获得XML数据(与XMLTextReader 类获得数据的线性方式正好相反),并且在修改XML文件的数据和结构时,具有非常完美的灵活性。另外,XMLDocument允许执行XSLT 转变,不过,这些额外的功能是以运行速度的降低和系统资源的更多占用为代价的。
  代码段1:XmlTextReader.aspx

<%@ Import Namespace="System.Xml" %>
<script language="C#" runat=server>
public class XmlDisplayfile://这个类读入并处理XML文件。{
public string LoadDocument(String XmlFileName) {
XmlTextReader xmlReader = null;
StringBuilder html = new StringBuilder();
try {
file://创建XMLTextReader的实例。xmlReader = new XmlTextReader(XmlFileName);
// 处理XML文件html.Append(ProcessXml(xmlReader));
}
catch (XmlException ex){
html.Append("发生一个XML异常:" + ex.ToString());} 
catch (Exception ex){html.Append("发生一个普通异常:" + ex.ToString());} 
finally {if (xmlReader != null)xmlReader.Close();}return html.ToString();}
private string ProcessXml(XmlTextReader xmlReader) 
{StringBuilder temp = new StringBuilder();
file://这个方法读入XML文件并生成输出的HTML文档。
while ( xmlReader.Read() ) {
// 处理一个元素节点的起始。
if (xmlReader.NodeType == XmlNodeType.Element) { 
file://忽略<people>和<person>元素if ((xmlReader.Name != "person") && (xmlReader.Name != "people")) 
{file://如果是一个<category>元素,开始一个新的段落if ( xmlReader.Name == "category" )temp.Append("<p>");
file://添加元素名到输出中temp.Append( xmlReader.Name + ": " );}}
// 处理文本节点
else if (xmlReader.NodeType == XmlNodeType.Text) 
temp.Append(xmlReader.Value + "<br>");
file://处理元素节点的结尾else if (xmlReader.NodeType == XmlNodeType.EndElement) {
file://如果是<email>节点,添加结束段落的标记if ( xmlReader.Name == "email" ) temp.Append("</p>"); } }
//结束while循环
return temp.ToString();
} file://结束ProcessXML方法
} file://结束XmlDisplay类
private void Page_Load(Object sender, EventArgs e){
file://创建XmlDisplay类的实例XmlDisplay XmlDisplayDemo = new XmlDisplay();
output.InnerHtml = XmlDisplayDemo.LoadDocument(Server.MapPath("XMLData.xml"));
}</script><html><head></head><body><h2>演示XmlTextReader类</h2>
<div id="output" runat="server"/></body></html>
로그인 후 복사

 1    static void Main(string[] args)
 2        {
 3            DateTime d1 =DateTime.Now;
 4            XmlDocumentTest();
 5            DateTime d2 =DateTime.Now;
 6            TimeSpan ts =d2-d1 ;
 7            
 8            Console.WriteLine(ts.TotalMilliseconds) ;    
 9            Console.Read() ;
10
11        }
12
13
14        public static string XmlFileName = "../../XML/1.xml";
15        
16        private static void XmlTextReaderTest()
17        {
18            XmlTextReader reader = new XmlTextReader(XmlFileName);
19            while (reader.Read() )
20            {
21                bool exit =false;
22                switch(reader.NodeType)
23                {
24                    case XmlNodeType.Element :
25                        break;
26                    case XmlNodeType.Text :
27                        if (reader.Value=="last")
28                        {
29                            exit=true;
30                        }
31                        break;
32                    case XmlNodeType.EndElement  :
33                        break;
34                    default:
35                        break;
36                }
37                if(exit)
38                {
39                    return;
40                    
41                }
42
43            }
44        }
45
46        private static void XmlDocumentTest()
47        {
48            XmlDocument xd =new XmlDocument() ;
49            xd.Load(XmlFileName) ;
50            XmlNode node = xd.SelectSingleNode("/people/person[category='last']"); 
51            Console.Write(node.Name) ; 
52        }
로그인 후 복사

以上就是XMLTextReader和XmlDocument读取XML文件的比较的内容,更多相关内容请关注PHP中文网(www.php.cn)!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

휴대폰에서 XML을 PDF로 변환 할 때 변환 속도가 빠르나요? 휴대폰에서 XML을 PDF로 변환 할 때 변환 속도가 빠르나요? Apr 02, 2025 pm 10:09 PM

모바일 XML에서 PDF의 속도는 다음 요인에 따라 다릅니다. XML 구조의 복잡성. 모바일 하드웨어 구성 변환 방법 (라이브러리, 알고리즘) 코드 품질 최적화 방법 (효율적인 라이브러리 선택, 알고리즘 최적화, 캐시 데이터 및 다중 스레딩 사용). 전반적으로 절대적인 답변은 없으며 특정 상황에 따라 최적화해야합니다.

휴대 전화에서 XML 파일을 PDF로 변환하는 방법은 무엇입니까? 휴대 전화에서 XML 파일을 PDF로 변환하는 방법은 무엇입니까? Apr 02, 2025 pm 10:12 PM

단일 애플리케이션으로 휴대 전화에서 직접 XML에서 PDF 변환을 완료하는 것은 불가능합니다. 두 단계를 통해 달성 할 수있는 클라우드 서비스를 사용해야합니다. 1. 클라우드에서 XML을 PDF로 변환하십시오. 2. 휴대 전화에서 변환 된 PDF 파일에 액세스하거나 다운로드하십시오.

휴대 전화에서 XML을 PDF로 변환하는 방법은 무엇입니까? 휴대 전화에서 XML을 PDF로 변환하는 방법은 무엇입니까? Apr 02, 2025 pm 10:18 PM

휴대 전화에서 XML을 PDF로 직접 변환하는 것은 쉽지 않지만 클라우드 서비스를 통해 달성 할 수 있습니다. 가벼운 모바일 앱을 사용하여 XML 파일을 업로드하고 생성 된 PDF를 수신하고 클라우드 API로 변환하는 것이 좋습니다. Cloud API는 Serverless Computing Services를 사용하고 올바른 플랫폼을 선택하는 것이 중요합니다. XML 구문 분석 및 PDF 생성을 처리 할 때 복잡성, 오류 처리, 보안 및 최적화 전략을 고려해야합니다. 전체 프로세스에는 프론트 엔드 앱과 백엔드 API가 함께 작동해야하며 다양한 기술에 대한 이해가 필요합니다.

Web.xml을 열는 방법 Web.xml을 열는 방법 Apr 03, 2025 am 06:51 AM

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

권장 XML 서식 도구 권장 XML 서식 도구 Apr 02, 2025 pm 09:03 PM

XML 서식 도구는 규칙에 따라 코드를 입력하여 가독성과 이해를 향상시킬 수 있습니다. 도구를 선택할 때는 사용자 정의 기능, 특수 상황 처리, 성능 및 사용 편의성에주의하십시오. 일반적으로 사용되는 도구 유형에는 온라인 도구, IDE 플러그인 및 명령 줄 도구가 포함됩니다.

XML을 PDF로 변환 할 수있는 모바일 앱이 있습니까? XML을 PDF로 변환 할 수있는 모바일 앱이 있습니까? Apr 02, 2025 pm 08:54 PM

XML을 PDF로 직접 변환하는 응용 프로그램은 근본적으로 다른 두 형식이므로 찾을 수 없습니다. XML은 데이터를 저장하는 데 사용되는 반면 PDF는 문서를 표시하는 데 사용됩니다. 변환을 완료하려면 Python 및 ReportLab과 같은 프로그래밍 언어 및 라이브러리를 사용하여 XML 데이터를 구문 분석하고 PDF 문서를 생성 할 수 있습니다.

XML 온라인 서식 XML 온라인 서식 Apr 02, 2025 pm 10:06 PM

XML 온라인 형식 도구는 지저분한 XML 코드를 읽기 쉬운 형식으로 자동 구성하고 형식을 유지 관리합니다. XML의 구문 트리를 구문 분석하고 서식 규칙을 적용함으로써 이러한 도구는 코드의 구조를 최적화하여 유지 관리 가능성과 팀워크 효율성을 향상시킵니다.

XML 형식을 여는 방법 XML 형식을 여는 방법 Apr 02, 2025 pm 09:00 PM

대부분의 텍스트 편집기를 사용하여 XML 파일을여십시오. 보다 직관적 인 트리 디스플레이가 필요한 경우 Oxygen XML 편집기 또는 XMLSPy와 같은 XML 편집기를 사용할 수 있습니다. 프로그램에서 XML 데이터를 처리하는 경우 프로그래밍 언어 (예 : Python) 및 XML 라이브러 (예 : XML.etree.elementtree)를 사용하여 구문 분석해야합니다.

See all articles