21

私は、.NET で XML を解析する立場にあります。少なくともXmlTextReaderとの間で選択できるようになりXDocumentました。これら 2 つ (またはフレームワークに含まれる他の XML パーサー) の比較はありますか?

たぶん、これは両方を深く試してみなくても決めるのに役立つかもしれません.

XML ファイルはかなり小さいと予想され、速度とメモリ使用量は、使いやすさに比べれば小さな問題です。:-)

(C# や IronPython から使用します。)

ありがとう!

4

2 に答える 2

42

すべてをメモリに読み込むことに満足している場合は、 を使用しますXDocument。それはあなたの人生をずっと楽にしてくれます。LINQ to XML は素敵なAPI です。

基本的に、巨大なXML ファイルをストリーミング形式で処理する必要がある場合は、 XmlReader(など)を使用します。これははるかに手間のかかる API ですが、ストリーミングが可能です (つまり、必要なときにのみデータを処理するため、巨大なドキュメントを処理し、一度に少量のメモリしか使用できません)。XmlTextReader

ただし、ハイブリッド アプローチがあります。小さな要素で構成された巨大なドキュメントがある場合は、要素の先頭に位置するXElementからを作成XmlReaderし、LINQ to XML を使用して要素を処理しXmlReader、次の要素に を移動して、再開する。

于 2011-11-11T15:57:31.967 に答える
11

XmlTextReader使用しないでください。

  1. XmlTeam による msdn ブログから

    効果的な XML パート 1: 適切な API を選択する

    の使用は避けてくださいXmlTextReader。これには、すでに使用している既存のアプリケーションを破壊せずに修正できなかったかなりの数のバグが含まれています。

    世界は動き出しましたよね?使用を避けるべき Xml API。

    廃止された API は、コンパイラがそれらを識別するのに役立つので簡単ですが、使用を避けるべき API がさらに 2 つあります。つまりXmlTextReader、 とXmlTextWriterです。これらのクラスには、既存のアプリケーションを破壊せずには修正できないバグが多数見つかりました。簡単な方法は、これらのクラスを非推奨にし、代わりに代替 API を使用するよう人々に依頼することです。残念ながら、これらの 2 つのクラスは、ECMA-335 (Common Language Infrastructure) 標準 ( http://www.ecma-international.org/publications/standards/Ecma-335.htm )の一部であるため、古いものとしてマークすることはできません– コンパニオン CLILibraryパーティション IV の一部である .xml ファイル)。

    幸いなことに、これらのクラスは非推奨ではありませんが、.NET Framework には既にこれらの代替 API があり、それらへの移行は比較的簡単です。XmlTextReader最初に、 orが使用されている場所を見つける必要がありますXmlTextWriter(残念ながら、これは手動のステップです)。ここで、 のすべての出現をXmlTextReaderに置き換えXmlReader、 のすべての出現をXmlTextWriterに置き換える必要がありますXmlWriter(派生元と派生元であるため、アプリはこれらを仮パラメーターなどとして既に使用している可能性があることに注意しXmlTextReaderXmlReaderくださいXmlTextWriter) XmlWriter。最後のステップは、XmlReader/オブジェクトがインスタンス化される方法を変更することです。リーダー/ライターを直接作成する代わりに、両方に存在XmlWriterする静的ファクトリ メソッドが必要です。.Create()XmlReaderおよびXmlWriterAPI。

  2. さらに、Visual Studio の Intellisense はXmlTextReaderSystem.Xml 名前空間の下にリストされません。クラスは次のように定義されます。

    [EditorBrowsable(EditorBrowsableState.Never)]
    public class XmlTextReader : XmlReader, IXmlLineInfo, IXmlNamespaceResolver
    

XmlReader.Createファクトリ メソッドは、渡された設定に応じて、抽象クラスの他の内部実装を返します。XmlReader


前方のみのストリーミング API (つまり、全体をメモリにロードしない) の場合は、メソッドを介してXmlReaderを使用します。XmlReader.Create

より簡単に操作できる API については、LINQ To XMLとも呼ばれるXDocumentを使用してください。XDocumentvs XmlDocument herehereを見つけてください。

于 2015-08-19T09:39:52.120 に答える