1

文字列があり、それが有効な XML である場合は、それを使って何かをしたいと考えています。そうでない場合は、文字列が有効な XML ではないことをユーザーに伝えます。

私のコードはこれです:

try 
{

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(rawData);

    //And here I want to do some things with doc if it is a valid XML.
}
catch
{
    //Tell the user that the string is not a valid XML.
}

これで、有効な XML データが含まれていればrawData問題ありません。また、rawData何か他のもの ( など) が含まれている場合、例外がスローされるため、文字列が有効な XML ではないことHELLOEVERYBODY!をユーザーに伝えることができます。

しかし、HTML ページがrawData含まれていると、プロセスに長い時間がかかります (20 秒以上!)...

ページによって異なる場合があります。例えば、処理はstackoverflow.com早いが処理に1pezeshk.com時間がかかる…

にロードする前に XML を検証するより高速な方法はありませんXmlDocumentか?

4

1 に答える 1

2

私はこれを以前に見ましたが、問題はXmlDocumentがドキュメントのDTDをダウンロードしようとすることです。サンプルでは、​​これはhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdです。これにより、接続を開くことができますが、何も返されません。したがって、簡単な解決策(エラーチェックを気にせずに)は、このような-tagの前にあるものをすべて削除することです。

WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string data = wc.DownloadString("http://1pezeshk.com/");
data = data.Remove(0, data.IndexOf("<html"));
XmlDocument xml = new XmlDocument();
xml.LoadXml(data);

編集

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdにアクセスすると、実際にはDTDが返されますが、応答するのに1分以上かかりました。まだDTD検証を行わないので、実際にはこれをHTMLから削除してから、HTMLとして検証してみてください。

于 2012-08-25T08:27:50.183 に答える