名前空間付きの要素を含むが、名前空間を宣言していない XML ドキュメントを処理しなければならないことがよくあります。例えば:
<root>
<a:element/>
</root>
プレフィックス「a」には名前空間 URI が割り当てられないため、ドキュメントは無効です。次のコードを使用してそのような XML ドキュメントをロードすると:
using (StreamReader reader = new StreamReader(new FileStream(inputFileName,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) {
doc = XDocument.Load(reader, LoadOptions.PreserveWhitespace);
}
ドキュメントに宣言されていない名前空間が含まれており、整形式ではないことを (正しく) 示す例外がスローされます。
では、パーサーがフォールバックするデフォルトの名前空間プレフィックス -> 名前空間 URI のペアを事前定義できますか? XMLNamespaceManager は有望に見えますが、この状況に適用する方法がわかりません (または可能であれば)。