gpt4 book ai didi

c# - 如何使用 xmlschemaset 和 xmlreader.create 根据 xsd 模式验证 xml

转载 作者:行者123 更新时间:2023-11-30 14:17:18 25 4
gpt4 key购买 nike

我正在修复程序中的警告,显然 xmlvalidating reader 和 xmlschemacollection 已过时。问题是,我不太确定如何。这是用涉及 xmlschemaset 和 xmlreader.create 的新验证函数“模仿”以前的验证函数的尝试。我首先声明一个架构,并使用 targeturi 字符串对其进行设置,然后在设置验证事件处理程序时将其添加到架构集中。我认为我的问题是设置阅读器和输入流。我知道如何使用 xmlvalidating reader 来做到这一点,但如果我想修复这些警告,那不是一个选项。这是代码和尝试。测试时只使用了新的验证xml代码,旧的被注释掉了。

            // New Validation Xml.
string xsd_file = filename.Substring(0, filename.Length - 3) + "xsd";
XmlSchema xsd = new XmlSchema();
xsd.SourceUri = xsd_file;

XmlSchemaSet ss = new XmlSchemaSet();
ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
ss.Add(xsd);
if (ss.Count > 0)
{
XmlTextReader r = new XmlTextReader(filename2);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(ss);
settings.ValidationEventHandler +=new ValidationEventHandler(ValidationCallBack);
XmlReader reader = XmlReader.Create(filename2, settings);
while (reader.Read())
{
}
reader.Close();
}

// Old Validate XML
XmlSchemaCollection sc = new XmlSchemaCollection();
sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
sc.Add(null, xsd_file);
if (sc.Count > 0)
{
XmlTextReader r = new XmlTextReader(filename2);
XmlValidatingReader v = new XmlValidatingReader(r);
v.ValidationType = ValidationType.Schema;
v.Schemas.Add(sc);
v.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while (v.Read())
{
}
v.Close();
}

private void ValidationCallBack(object sender, ValidationEventArgs e)
{
// If Document Validation Fails
isvalid = false;
MessageConsole.Text = "INVALID. Check message and datagridview table.";
richTextBox1.Text = "The document is invalid: " + e.Message;
}

不幸的是,当我运行该程序并尝试验证无效的 xml 文档时,它会给我这样的错误:“'URNLookup' 元素未声明。” URNLookup 元素是 xml 文件的根元素。我总是可以回到旧的验证方法,但那些警告吓到我了。

非常感谢任何帮助。先感谢您!如果我遗漏任何信息,我很乐意提供更多信息。

  • tf.rz(.NET 3.5 SP1,Visual Studio C# 2008)

最佳答案

我已经解决了这个问题,现在它又可以正常工作了,没有任何警告。在新验证 XML 中:

            // New Validation Xml.
string xsd_file = filename.Substring(0, filename.Length - 3) + "xsd";
XmlSchema xsd = new XmlSchema();
xsd.SourceUri = xsd_file;

XmlSchemaSet ss = new XmlSchemaSet();
ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
ss.Add(null, xsd_file);
if (ss.Count > 0)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(ss);
settings.Schemas.Compile();
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
XmlTextReader r = new XmlTextReader(filename2);
using (XmlReader reader = XmlReader.Create(r, settings))
{
while (reader.Read())
{
}
}
}

ss.add 已更改为具有命名空间和文件字符串。添加了 settings.schemas.compile(),并添加了“using(xmlreader reader.. . . .”) 的微不足道的重组。

此页面对我帮助很大:http://msdn.microsoft.com/en-us/library/fe6y1sfe(v=vs.80).aspx现在可以使用了。

关于c# - 如何使用 xmlschemaset 和 xmlreader.create 根据 xsd 模式验证 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com