XML ファイルを通過する while ループがあり、ノード「url」の 1 つに無効な値が含まれていることがあります。これに try-catch ステートメントを配置して、無効な値をキャッチします。問題は、無効な値が取得されるたびに while ループが強制終了され、プログラムがそのループの外で続行されることです。無効な値が見つかった場合に XML ファイルの残りの部分を読み続けるには、while ループが必要です。
これが私のコードです:
XmlTextReader reader = new XmlTextReader(fileName);
int tempInt;
while (reader.Read())
{
switch (reader.Name)
{
case "url":
try
{
reader.Read();
if (!reader.Value.Equals("\r\n"))
{
urlList.Add(reader.Value);
}
}
catch
{
invalidUrls.Add(urlList.Count);
}
break;
}
}
残りの switch ステートメントは関係ないため、含めないことにしました。これが私の XML のサンプルです。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<visited_links_list>
<item>
<url>http://www.grcc.edu/error.cfm</url>
<title>Grand Rapids Community College</title>
<hits>20</hits>
<modified_date>10/16/2012 12:22:37 PM</modified_date>
<expiration_date>11/11/2012 12:22:38 PM</expiration_date>
<user_name>testuser</user_name>
<subfolder></subfolder>
<low_folder>No</low_folder>
<file_position>834816</file_position>
</item>
</visited_links_list>
コード全体で発生する例外は、次のようなものです。
「' '、16 進値 0x05 は無効な文字です。3887 行目、13 番目の位置。」