gpt4 book ai didi

c# - Xml Xsd 验证失败 (xs :anyType)

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:38 25 4
gpt4 key购买 nike

我有这个XML文件

<bookstore>  
<test>
<test2/>
</test>
</bookstore>

和这个XSD 架构

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="test" type="xsd:anyType" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

我打算从 C# 代码验证 xml 文件。有一种验证 XML 文件的方法:

    // validate xml
private void ValidateXml()
{
_isValid = true;

// Get namespace from xml file
var defaultNamespace = XDocument.Load(XmlFileName).Root.GetDefaultNamespace().NamespaceName;

// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.Schemas.Add(defaultNamespace, XsdFileName);
settings.ValidationEventHandler += OnValidationEventHandler;

// Create the XmlReader object.
using(XmlReader reader = XmlReader.Create(XmlFileName, settings))
{
// Parse the file.
while (reader.Read()) ;
}
}

private void OnValidationEventHandler(object s, ValidationEventArgs e)
{
if (_isValid) _isValid = false;

if (e.Severity == XmlSeverityType.Warning)
MessageBox.Show("Warning: " + e.Message);
else
MessageBox.Show("Validation Error: " + e.Message);
}

我知道,这个 XML 文件是有效的。但是我的代码返回了这个错误:

Validation Error: Could not find schema information for the element 'test2'

我的错误在哪里?

谢谢!!!

最佳答案

更新:我假设您的代码与您列出的错误匹配(我已经在 .NET 3.5SP1 上尝试了您的代码,但我无法重现您的行为)。下面的解决方法应该肯定有效(您得到的错误与过程内容子句一致 strict 而不是 lax )。

替换<xsd:element name="test" type="xsd:anyType" />具有允许 xsd:any 的复杂内容,如下所示:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="test">
<xsd:complexType>
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

“松懈”仍会产生信息;如果您希望该消息消失,您可以使用“跳过”。不管怎样,skiplax在 xsd:any 中为您提供所需的东西。

关于c# - Xml Xsd 验证失败 (xs :anyType),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587520/

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