ストリームの途中に XML 宣言が含まれているため、整形式ではない以下の XML フラグメントを処理できるツールを作成する必要があります。
同社はすでにこれらの種類のファイルを長期間使用しているため、形式を変更するオプションはありません。
解析を行う利用可能なソース コードはありません。また、新しいツールのプラットフォームとして選択されるのは、.NET 4 以降であり、できれば C# を使用します。
フラグメントは次のようになります。
<Header>
<Version>1</Version>
</Header>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
XmlReaderSettings.ConformanceLevelをConformanceLevel.Fragmentに設定してXmlReaderを使用すると、完全な要素を正常に読み取ることができます。要素の開始でさえ問題ありませんが、情報を読み取っているときに、その場所で予期しない XML 宣言を読み取るため、 XmlExceptionがスローされます。<Header>
<Entry>
<Detail>
XmlReader
<?xml...?>
重い文字列操作以外に、これらの XML 宣言をスキップするために必要なオプションは何ですか?
フラグメントは簡単に 100 メガバイトを超えてしまうので、一度にすべてをメモリにロードするのは避けたいと思います。しかし、それが必要なことであり、私はそれに対してオープンです。
私が得る例外の例:
System.Xml.XmlException: Unexpected XML declaration.
The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it.
Line ##, position ##.