给定编码中的字符无效

时间:2011-07-26 12:02:55

标签: c# xmldocument

XmlDocument oXmlDoc = new XmlDocument();

try
{
    oXmlDoc.Load(filePath);
}
catch (Exception ex)
{
    // Log Error Here
    try
    {
        Encoding enc = Encoding.GetEncoding("iso-8859-1");
        StreamReader sr = new StreamReader(filePath, enc);
        String response = sr.ReadToEnd();
        oXmlDoc.LoadXml(response);
    }
    catch (Exception innerException)
    {
        // Log Error Here
        return false;
    }
}

我从第三方获得了xml文件,其中还包括xml声明后的文档类型定义文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SoccerMatchPlus SYSTEM "SoccerMatchPlus.dtd">
<SoccerMatchPlus matchid="33226">
<Booking id="13642055" time="47">
<Player id="370927">
<Name firstName="Lasse" initials="L" lastName="Nielsen">L Nielsen</Name>
</Player>
<Team id="26415" name="AæB" homeOrAway="Home"/>
</Booking>
</SoccerMatchPlus>

如果我使用给定编码中的无效字符解析文件。第102行,第56位。如果我捕获异常并重试解析文件,那么我得到了另一个问题,文件解析但是

我收到错误找不到文件'C:\ Windows \ system32 \ SoccerMatchPlus.dtd'。

文档类型定义文件名为SoccerMatchPlus.dtd,由第三方添加到根元素之前。

对于Load方法,解析器从xml文件也存在的位置加载文件。

我把SoccerMatchPlus.dtd放在xml文件所在的其他位置,我可以在运行时从指定的位置加载那个SoccerMatchPlus.dtd文件,还是告诉我加载包含无效字符数据的xml文件的更好方法?

1 个答案:

答案 0 :(得分:1)

使用XmlResolver类的XmlDocument属性禁用DTD处理。

XmlDocument oXmlDoc = new XmlDocument();
oXmlDoc.XmlResolver = null;