3

次のコードを使用して、HTTP応答ストリームをXmlDocumentに変換します。

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responseStream = response.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
String responseString = responseReader.ReadToEnd();
Console.WriteLine(responseString);
Int32 htmlTagIndex = responseString.IndexOf("<html",
   StringComparison.OrdinalIgnoreCase);
XmlDocument responseXhtml = new XmlDocument();
responseString = responseString.Substring(htmlTagIndex); // MARK 1
responseString = responseString.Replace("&nbsp", " "); // MARK 2
responseXhtml.LoadXml(responseString);
return responseXhtml;

MARK 1行は、DOC型定義行をスキップするためのものです。

MARK 2行は、宣言されていないエンティティ'nbsp'へのエラー参照を回避するためのものです。

これを行うためのより良い方法はありますか?上記のコードには文字列操作が多すぎます。

ありがとう!

4

1 に答える 1

6

HtmlAgilityPackを直接使用してhtmlを解析します。htmlをxmlに変換する必要がある場合でも、それを使用できます。

using (WebClient wc = new WebClient())
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(wc.DownloadString("http://www.google.com"));
    doc.OptionOutputAsXml = true;

    StringWriter writer = new StringWriter();
    doc.Save(writer);

    var xDoc = XDocument.Load(new StringReader(writer.ToString()));
}
于 2012-10-10T15:17:30.773 に答える