>  기사  >  백엔드 개발  >  C#에서 XML을 읽는 세 가지 구현 방법에 대한 자세한 코드 설명

C#에서 XML을 읽는 세 가지 구현 방법에 대한 자세한 코드 설명

黄舟
黄舟원래의
2017-03-06 11:14:042504검색

XML 파일은 일반적으로 사용되는 파일 형식입니다. 이 기사에서는 주로 C#에서 XML을 읽는 세 가지 구현 방법, 주로 XmlDocument, XmlTextReader 및 Linq to Xml을 소개합니다.

서문

XML 파일은 WinForm의 app.config, 웹 프로그램의 web.config 등 일반적으로 사용되는 파일 형식입니다. 문서와 많은 중요한 장소에서 발견됩니다. (Json과 유사) Microsoft는 또한 애플리케이션에 XML 파일을 저장하는 데 도움이 되는 일련의 클래스 라이브러리를 제공합니다.

프로그램에서 XML 파일에 액세스하고 작동하는 데에는 일반적으로 두 가지 모델이 있습니다.

DOM(문서 객체 모델):DOM 사용의 이점은 XML 문서 편집 및 업데이트, 문서 내 데이터에 대한 무작위 액세스, XPath를 사용한 쿼리 기능 등이 있다는 것입니다. , 그러나 DOM의 단점은 전체 문서를 한 번에 메모리에 로드해야 한다는 점이며, 이로 인해 대용량 문서의 경우 리소스 문제가 발생할 수 있습니다.

스트림 모델: 스트림 모델은 스트림 개념을 사용하여 XML 파일, 즉 현재 노드에만 액세스하기 때문에 이 문제를 매우 잘 해결합니다. 단점은 읽기 전용, 앞으로만 가능하며 문서에서 뒤로 탐색 작업을 수행할 수 없다는 것입니다.

C#에서 XML 파일을 읽는 세 가지 방법은 다음과 같습니다.

1. XmlDocument(DOM 모드)를 사용합니다.

2 .XmlTextReader 사용(스트림 모드)

3. Linq를 Xml에 사용(Linq 모드)

XmlDocument 모드를 사용하여 읽기

XmlDocument를 사용하는 것은 문서 구조 모델을 기반으로 XML 파일을 읽는 방법입니다. XML 파일에서는 XML을 문서 선언(Declare), 요소(Element), 속성(Attribute), 텍스트(Text) 등으로 구성된 트리. 첫 번째 노드를 루트 노드라고 하며, 각 노드는 노드를 얻은 후 일련의 속성을 통해 얻을 수 있습니다. 또는 메소드 이 노드 또는 기타 속성의 값 예:

xn 代表一个结点
xn.Name;//这个结点的名称
xn.Value;//这个结点的值
xn.ChildNodes;//这个结点的所有子结点
xn.ParentNode;//这个结点的父结点

모든 데이터 읽기

사용할 때는 먼저 XmlDocument 개체를 선언한 다음 Load 메서드를 호출하여 지정된 경로에서 XML 파일을 로드합니다.

BookModel은 책 모델입니다

#region XmlDocument读取

public static void XmlDocumentReadDemo()
{
  //list
  List<BookModel> bookModeList = new List<BookModel>();

  //使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.
  XmlDocument doc = new XmlDocument();

  XmlReaderSettings settings = new XmlReaderSettings();
  settings.IgnoreComments = true;//忽略文档里面的注释
  using (XmlReader reader = XmlReader.Create(@"d:/demo.xml", settings))
  {
    doc.Load(reader);
    //doc.Load(@"d:/demo.xml");
    //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码
    // 得到根节点bookstore
    XmlNode xn = doc.SelectSingleNode("bookstore");
    // 得到根节点的所有子节点
    XmlNodeList xnl = xn.ChildNodes;

    foreach (XmlNode xn1 in xnl)
    {
      BookModel bookModel = new BookModel();
      // 将节点转换为元素,便于得到节点的属性值
      XmlElement xe = (XmlElement)xn1;
      // 得到Type和ISBN两个属性的属性值
      bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
      bookModel.BookType = xe.GetAttribute("Type").ToString();
      // 得到Book节点的所有子节点
      XmlNodeList xnl0 = xe.ChildNodes;
      bookModel.BookName = xnl0.Item(0).InnerText;
      bookModel.BookAuthor = xnl0.Item(1).InnerText;
      bookModel.BookPrice = Convert.ToDouble(xnl0.Item(2).InnerText);

      bookModeList.Add(bookModel);
    }
  }
  bookModeList.Add(new BookModel());
}

#endregion XmlDocument读取

실행 결과는 다음과 같습니다.

읽으려면 XmlTextReader를 사용하세요

XmlTextReader를 사용하여 데이터를 읽을 때는 먼저 스트림을 생성한 후 read() 메서드를 사용하여 아래쪽으로 연속적으로 읽으며, 읽은 노드 유형에 따라 해당 작업을 수행합니다.

#region XmlTextReaderDemo

public static void XmlTextReaderDemo()
{
  XmlTextReader reader = new XmlTextReader(@"d:/demo.xml");
  List<BookModel> modelList = new List<BookModel>();
  BookModel model = new BookModel();
  while (reader.Read())
  {
    if (reader.NodeType == XmlNodeType.Element)
    {
      if (reader.Name == "book")
      {
        model.BookType = reader.GetAttribute("Type");
        model.BookISBN = reader.GetAttribute("ISBN");
      }
      if (reader.Name == "title")
      {
        model.BookName = reader.ReadElementContentAsString();
      }
      if (reader.Name == "author")
      {
        model.BookAuthor = reader.ReadElementString().Trim();
      }
      if (reader.Name == "price")
      {
        model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());
      }
      //for(int i=0;i<reader.AttributeCount;i++)
      //{
      //  reader.MoveToAttribute(i);
      //}
    }

    if (reader.NodeType == XmlNodeType.EndElement)
    {
      modelList.Add(model);
      model = new BookModel();
    }
  }
  reader.Close();
  modelList.Add(new BookModel());
}

#endregion XmlTextReaderDemo

Linq를 Xml로 사용하여 읽기

Linq는 다음과 같은 새로운 기능입니다. C# 3.0에 등장하면서 XML 파일을 포함한 많은 데이터 소스를 편리하게 조작하는 데 사용할 수 있습니다. Linq를 사용하여 XML 파일을 조작하는 것은 매우 편리하고 비교적 간단합니다.

System.Linq를 사용하여 참조해야 함;using System.Xml.Linq;

#region 读取所有的数据

XElement xe = XElement.Load(@"d:/demoLinq.xml");
//xe.Descendants
var elements = from ele in xe.Elements()
        select ele;
List<BookModel> modelList = new List<BookModel>();
foreach (var ele in elements)
{
  BookModel model = new BookModel();
  model.BookAuthor = ele.Element("author").Value;
  model.BookName = ele.Element("title").Value;
  model.BookPrice = Convert.ToDouble(ele.Element("price").Value);
  model.BookISBN = ele.Attribute("ISBN").Value;
  model.BookType = ele.Attribute("Type").Value;

  modelList.Add(model);
}
modelList.Add(new BookModel());

#endregion 读取所有的数据

요약

1. XmlDocument 방식의 장점은 찾기 쉽다는 점

2. Xml의 최신 방식도 추천 방식이다.

위는 C#에서 XML을 읽는 세 가지 구현 방법에 대한 자세한 코드 설명입니다. 자세한 내용은 PHP 중국어 사이트(www.php.cn)를 참고하세요!

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