首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从.Net v4.5升级到.Net v4.5.2后,未声明元素的验证错误

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

Stack Overflow用户
提问于 2016-04-07 03:30:48
回答 1查看 941关注 0票数 3

据我所知,已经有很多针对XML验证的“元素未找到”错误的现有线程,但我将此发布为我的问题略有不同。

我的代码在.Net v4.5上运行得很好。在将框架升级到v4.6.1之后,我开始对XML文件中的每个xml元素都出现这个错误。在降级时,我发现错误是从.Net框架v4.5.2开始出现的。下面是我的代码:

XML - Book.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<!ELEMENT book (title, author, isbn)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>

C#函数

代码语言:javascript
复制
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。

任何帮助解决这个问题的人都将不胜感激。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2018-06-12 15:06:01

我来得有点晚,但我想我已经找到了一个解决方案,就在settings.ValidationEventHandler +=新ValidationEventHandler(ValidationCallBack)之前添加以下代码;

代码语言:javascript
复制
settings.XmlResolver = new XmlUrlResolver();

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36460672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档