ホームページ  >  記事  >  バックエンド開発  >  XMLを読み込むC#の3つの実装方法の詳細コード解説

XMLを読み込むC#の3つの実装方法の詳細コード解説

黄舟
黄舟オリジナル
2017-03-06 11:14:042503ブラウズ

XML ファイルは一般的に使用されるファイル形式です。この記事では主に C# で XML を読み取るための 3 つの実装方法、主に XmlDocument、XmlTextReader、Linq to Xml を紹介します。興味のある方は詳細をご覧ください。

はじめに

XML ファイルは、WinForm の app.config や Web プログラムの web.config ファイルなど、一般的に使用されるファイル形式であり、多くの重要な場所で見つかります。 (Json と同様) Microsoft は、アプリケーションに XML ファイルを保存するのに役立つ一連のクラス ライブラリも提供しています。プログラムで XML ファイルにアクセスして操作するには、通常、次の 2 つのモデルがあります。


DOM (ドキュメント オブジェクト モデル):

DOM を使用する利点は、XML ドキュメントの編集と更新、ドキュメント内のデータへのランダム アクセス、および XPath クエリが可能であることです。ただし、DOM の欠点は、大きなドキュメントの場合はドキュメント全体を一度にメモリにロードする必要があることです。これにより、リソースの問題が発生する可能性があります。

ストリーム モデル:

ストリーム モデルは、ストリームの概念を使用して XML ファイルにアクセスするため、この問題を非常にうまく解決します。つまり、メモリ内には常に現在のノードのみが存在しますが、欠点として、読み取り専用かつ前方へのみであり、ドキュメント内で後方ナビゲーション操作を実行することはできません。

C# で XML ファイルを読み取る 3 つの方法は次のとおりです:

1. XmlDocument を使用する (DOM モード)

2. XmlTextReader を使用する (ストリーミング モード)

3. Linq to Xml を使用する (Linq モード) )

XmlDocument を使用して読み取る

XmlDocument を使用すると、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 を使用します

s data の場合、最初に次のように、read() メソッドを使用して継続的に読み取り、ノードの読み取りの種類に応じて対応する操作を実行します。は、C# 3.0 で登場した新機能です。Linq を使用して XML ファイルを操作すると、非常に便利で比較的簡単です。

System.Linq を使用して引用する必要があります。System.Xml.Linq を使用してください。

#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

概要

1. XmlDocument メソッドの利点は、見つけやすいことです

2。 . XmlTextReader メソッドはストリーム読み取りです。一時的に使用されるメモリが少なくなります


3. www.php.cn)。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。