繁体   English   中英

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

[英]Element is not declared validation error post upgrading from .Net v4.5 to .Net v4.5.2

我知道已经有许多现有线程用于 XML 验证的“找不到元素”错误,但我发布此消息是因为我的问题略有不同。

我的代码运行良好,直到它在 .Net v4.5 上运行。 将框架升级到 v4.6.1 后,我开始为我的 xml 文件中的每个 XML 元素收到此错误。 降级后,我发现错误是从 .Net framework 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 元素(书籍、标题、作者和 isbn)抛出验证错误(未找到元素)。

任何解决此问题的帮助将不胜感激。

谢谢,

我参加聚会有点晚了,但我想我已经通过在settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);之前添加以下代码找到了解决方案

settings.XmlResolver = new XmlUrlResolver();

从 .NET Framework 4.5.2 开始,此设置的默认值为 null。

参考: https : //msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.xmlresolver(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM