[ケース] 大量のドキュメントに関するメタデータを含む「xml ファイル」を大量に受け取りました。少なくとも、それは私が要求したものでした。ルート要素のない「xmlファイル」で受け取ったものは、次のような構造になっています(要素の束を省略しました):
<folder name = "abc"></folder>
<folder name = "abc/def">
<document name = "ghi1">
</document>
<document name = "ghi2">
</document>
</folder>
[問題] XmlTextReader オブジェクトでファイルを読み込もうとすると、ルート要素がないと言って失敗します。
[現在の回避策] もちろん、ファイルをストリームとして読み取り、< xmlroot> と < /xmlroot> を追加してストリームを新しいファイルに書き込み、そのファイルを XmlTextReader で読み取ることができます。これはまさに私が今やっていることですが、元のデータを「改ざん」したくないのです。
[要求された解決策] DocumentFragment オプションを指定して XmlTextReader を使用する必要があることを理解しています。ただし、これによりコンパイル時エラーが発生します。
System.Xml.dll で 'System.Xml.XmlException' 型の未処理の例外が発生しました
追加情報: XmlNodeType DocumentFragment は、部分的なコンテンツの解析ではサポートされていません。行 1、位置 1。
【不良コード】
using System.Diagnostics;
using System.Xml;
namespace XmlExample
{
class Program
{
static void Main(string[] args)
{
string file = @"C:\test.txt";
XmlTextReader tr = new XmlTextReader(file, XmlNodeType.DocumentFragment, null);
while(tr.Read())
Debug.WriteLine("NodeType: {0} NodeName: {1}", tr.NodeType, tr.Name);
}
}
}