据我所知,已经有很多针对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。
任何帮助解决这个问题的人都将不胜感激。
谢谢,
发布于 2018-06-12 15:06:01
我来得有点晚,但我想我已经找到了一个解决方案,就在settings.ValidationEventHandler +=新ValidationEventHandler(ValidationCallBack)之前添加以下代码;
settings.XmlResolver = new XmlUrlResolver();
从.NET框架4.5.2开始,此设置的默认值为null。
参考:https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.xmlresolver(v=vs.110).aspx
https://stackoverflow.com/questions/36460672
复制相似问题