C#.NET4.0でルート要素が重複している無効なXMLをプログラムでクリーンアップしようとしています。私がやりたいのは、すべての内部要素を1つのルート要素に統合し、重複するルートを削除して、次のようにすることです。
<a>
<b></b>
</a>
<a>
<c></c>
</a>
になります
<a>
<b></b>
<c></c>
</a>
ただし、複製されたルート要素は内部XMLにも表示される可能性があります。その場合、交換したくないので、
<a>
<a></a>
<b></b>
</a>
<a>
<c></c>
<a></a>
</a>
になります
<a>
<a></a>
<b></b>
<c></c>
<a></a>
</a>
また、複製されたルート要素が常にであるとは限りません<a>
。任意の名前を付けることができます。
これまで、このタスクを実行するために、ある種のエレガントな正規表現を考えようとしてきましたが/<((.|\n|\r)*?)>(.|\n|\r)*<\/\1>/
、これに伴う問題は、内部XMLでの貪欲な一致が多すぎて、内部XMLでの非貪欲な一致であるということです。一致が少なすぎます。
ドキュメントのルートに戻ったときに識別するために、開いているタグと閉じているタグをカウントするスタックを作成する必要がないことを望んでいました。この問題を解決するためのシンプルでエレガントな方法を探しています。
オープンソースのサードパーティライブラリは、それらの1つがこの種の状況を処理する場合、潜在的に許容できるソリューションですが、私はむしろそれらを避けたいと思います。
誰かアイデアはありますか?