【发布时间】:2021-07-18 02:56:29
【问题描述】:
我有一个 xml 模式文件,它描述了一个名为 MessageProcessingResult 的元素,该元素可以有子元素“MessageID”和“Category”。我的 xml 显然有这些元素,但是当我根据架构验证 xml 时,我收到一个错误,指出“类别”元素无效:
命名空间中的元素“MessageProcessingResult” “http://test.com/MessageProcessing”的子元素无效 命名空间“http://test.com/MessageProcessing”中的“类别”。列表 预期的可能元素:'Category, MessageID'。
我一定是错误地定义了我的架构,但我不知道它到底是什么。
我的架构、xml和验证码如下:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://test.com/MessageProcessing"
targetNamespace="http://test.com/MessageProcessing"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xs:element name="MessageProcessingResult">
<xs:complexType>
<xs:all>
<xs:element name="MessageID" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="Category">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Success"/>
<xs:enumeration value="Problem"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
xml 看起来像这样:
<MessageProcessingResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://test.com/MessageProcessing">
<Category>Success</Category>
<MessageID>id</MessageID>
</MessageProcessingResult>
我使用此代码进行验证:
public class XmlValidator
{
public void Validate(Stream strXml)
{
XmlReaderSettings settings = new XmlReaderSettings();
//settings.Schemas.Add(null, @"Schema\MessageProcessingResults.xsd");
settings.Schemas.Add(null, @"Schema\MessageProcessingResult.xsd");
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(XmlSchemaValidationEventHandler);
XmlReader xml = XmlReader.Create(strXml, settings);
this.Errors = new List<string>();
while (xml.Read()) { }
}
public List<string> Errors { get; set; }
private void XmlSchemaValidationEventHandler(object sender, ValidationEventArgs e)
{
this.Errors.Add($"{e.Severity} {e.Message}");
}
}
【问题讨论】:
标签: c# xml .net-core xsd xml-validation