从.Net v4.5升级到.Net v4.5.2后,出现元素未声明的验证错误

3
我知道有许多关于XML验证中“未找到元素”错误的线程,但我发帖是因为我的问题稍有不同。
在.Net v4.5上运行良好的代码,在将框架升级到v4.6.1后,对xml文件中每个XML元素都会出现此错误。降级后,我发现错误从.Net框架v4.5.2开始发生。以下是我的代码: XML - Book.xml
<?xml version="1.0" ?>
<!DOCTYPE book SYSTEM "Book.dtd">
<book>
    <title>The Lord of the Rings</title>
    <author>J.R.R. Tolkien</author>
    <isbn>1572810556</isbn>
</book>

DTD - Book.dtd

<!ELEMENT book (title, author, isbn)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>

C#函数

public static void ReadXMLwithDTD()
{
    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.DTD;
    settings.DtdProcessing = DtdProcessing.Parse;
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
    settings.IgnoreWhitespace = true;

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("Book.xml", settings);

    // Parse the file.
    while (reader.Read())
    {
        Console.WriteLine("{0}, {1}: {2} ", reader.NodeType, reader.Name, reader.Value);
    }
}

private static void ValidationCallBack(object sender, ValidationEventArgs e)
{
    if (e.Severity == XmlSeverityType.Warning)
        Console.WriteLine("Warning: Matching schema not found.  No validation occurred." + e.Message);
    else // Error
        Console.WriteLine("Validation error: " + e.Message);
}

运行代码时,回调函数会针对四个XML元素(book、title、author和isbn)抛出验证错误(找不到元素)。希望能够提供帮助来解决这个问题。谢谢。

尝试过了,结果一样。谢谢。 - Vishal
尝试更改设置以查看是否有所不同?您是如何生成XML的?是否使用类似的代码?在工作和不工作时是否使用相同的XML?模式是否内置于XML文件中? - jdweng
1
你确认DTD是否被完全读取了吗?如果你在其中引入语法错误,那么错误信息是否会发生改变呢? - C. M. Sperberg-McQueen
似乎DTD没有被读取。我引入了错误,甚至重命名了文件,但没有任何变化。接下来,我恢复了错误并将框架切换回4.5,代码按预期工作。在框架仍设置为4.5的情况下,我重新引入了错误,代码会相应地抛出错误。谢谢。 - Vishal
所以,我现在通过将DTD嵌入XML文件中来解决这个问题。使用上述XML与初始代码不会导致任何验证错误。 ]> 指环王 J.R.R.托尔金 1572810556 - Vishal
显示剩余2条评论
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接