次の C# コードを検討してください。
using System.Xml.Linq;
namespace TestXmlParse
{
class Program
{
static void Main(string[] args)
{
var testxml =
@"<base>
<elem1 number='1'>
<elem2>yyy</elem2>
<elem3>xxx <yyy zzz aaa</elem3>
</elem1>
</base>";
XDocument.Parse(testxml);
}
}
}
もちろん、解析時に System.Xml.XmlException が発生し、elem3 について不平を言っています。エラーメッセージは次のとおりです。
System.Xml.XmlException was unhandled
Message='aaa' is an unexpected token. The expected token is '='. Line 4, position 59.
Source=System.Xml
LineNumber=4
LinePosition=59
明らかに、これは実際の XML ではありません (サードパーティから XML を取得します)。サードパーティが XML を送信する前にクリーンアップするのが最善の答えですが、この XML を修正する他の方法はありますか?パーサーに渡す前に?これを修正するハックな方法を考案しました。例外をキャッチし、それを使用して、エスケープする必要がある文字を探す必要がある場所を教えてください。もう少しエレガントで包括的なものを望んでいました。
どんな提案でも大歓迎です。
これがだまされている場合は、他の質問を教えてください。私はこれを自分で閉じます。私はカルマの獲得よりも答えに興味があります。
編集:
私は自分の質問を私が望んでいたほど明確にしなかったと思います. elem3 の「<」が間違っていることはわかっています。解析を試みる前に、そのような不適切な形式の xml を検出 (および修正) するエレガントな方法を見つけようとしています。私が言うように、私はこの xml をサードパーティから入手しましたが、彼らが私に与えるものを制御することはできません。