トップ回答者
【C#】エラー:セキュリティ上の理由から、DTD はこの XML ドキュメントでは使用できません。

質問
-
エラーが解決できなくて困っています。
C#に関しては全くの素人でどうしたらいいかわかりません。
どなたかわかる方教えてください!!
以下に情報を書いておきます。
■エラー
「型 'System.Xml.XmlException' のハンドルされていない例外が System.Xml.dll で発生しました
追加情報: セキュリティ上の理由から、DTD はこの XML ドキュメントでは使用できません。
DTD 処理を有効にするには、XmlReaderSettings の DtdProcessing プロパティを Parse に設定し、
XmlReader.Create メソッドにその設定を渡してください。」
■状況
簡易RSSリーダーを参考書に沿って作成していたところ、上のエラーが出てきた。
参考書付属の完成版ソースコードを実行しても同じエラーが出てきた。
ネットで調べて、見よう見まねで次を追加してみるもうまくいかず。
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;⇒XmlReader.Createにsettingsを渡す。
■開発環境
・Windows8
・MicroSoft VisualStudio Express 2012
・セキュリティーソフトはNorton(一応書いておきます)
・参考書は「作って覚えるC#入門」(2010年)
■ソースコード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Xml;
namespace SimpleRSSReader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void OpenRSSAll()
{
//ネットアクセスするためWebClientのを作成
WebClient webClient = new WebClient();
//URLを開き、ストリームとして読み込む
using (Stream stream = webClient.OpenRead(textBoxURL.Text))
{
//ストリームリーダーを作成(UTF-8でエンコード)
using (StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8")))
{
//ストリームの末尾になるまで繰り返す
while (!streamReader.EndOfStream)
{
//リストボックスに1行ずつ追加
listBoxRSS.Items.Add(streamReader.ReadLine());
}
}
}
}
private void buttonOpen_Click(object sender, EventArgs e)
{
//OpenRSSAll();
OpenRSSXmlReader();
}
private void OpenRSSXmlReader()
{
//URLからRSSファイルを読み取るxmlReaderを作成
using (XmlReader xmlReader = XmlReader.Create(textBoxURL.Text))
{
//ノードがある限り、読み込む
while (xmlReader.Read())
{
//<item>に移動
xmlReader.ReadToFollowing("item");
//<title>へ移動
xmlReader.ReadToFollowing("titile");
//<title></tilte>の中身をリストボックスに追加
listBoxRSS.Items.Add(xmlReader.ReadString());
}
}
}
}
}
以上
回答
すべての返信
-
すみません。どうせ間違っているだろうと思い、削除してしました。
以下、追加したソースコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Xml;
namespace SimpleRSSReader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void OpenRSSAll()
{
//ネットアクセスするためWebClientのを作成
WebClient webClient = new WebClient();
//URLを開き、ストリームとして読み込む
using (Stream stream = webClient.OpenRead(textBoxURL.Text))
{
//ストリームリーダーを作成(UTF-8でエンコード)
using (StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8")))
{
//ストリームの末尾になるまで繰り返す
while (!streamReader.EndOfStream)
{
//リストボックスに1行ずつ追加
listBoxRSS.Items.Add(streamReader.ReadLine());
}
}
}
}
private void buttonOpen_Click(object sender, EventArgs e)
{
//OpenRSSAll();
OpenRSSXmlReader();
}
private void OpenRSSXmlReader()
{XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
//URLからRSSファイルを読み取るxmlReaderを作成
using (XmlReader xmlReader = XmlReader.Create(textBoxURL.Text,settings))
{
//ノードがある限り、読み込む
while (xmlReader.Read())
{
//<item>に移動
xmlReader.ReadToFollowing("item");
//<title>へ移動
xmlReader.ReadToFollowing("titile");
//<title></tilte>の中身をリストボックスに追加
listBoxRSS.Items.Add(xmlReader.ReadString());
}
}
}
}
}