C#怎么验证一个XML字符串是否符合XSD规范_C#编程验证XML与XSD schema一致性

使用xmlReader结合XmlSchemaSet和ValidationEventHandler可验证XML是否符合XSD。1. 加载XSD字符串到XmlSchemaSet;2. 配置XmlReaderSettings启用Schema验证并订阅错误事件;3. 通过XmlReader读取XML触发验证,错误通过事件捕获并标记isValid为false;4. 示例显示有效XML返回True,无效类型如Age为abc则输出False并打印错误信息。关键点包括必须处理ValidationEventHandler、使用StringReader处理字符串流、设置ValidationType.Schema。该方法可靠校验结构与数据类型合规性。

C#怎么验证一个XML字符串是否符合XSD规范_C#编程验证XML与XSD schema一致性

c#中验证XML字符串是否符合XSD规范,可以通过 XmlReader 配合 XmlSchemaSet 和验证事件来实现。核心思路是加载XSD定义,然后用它去校验XML内容的结构和数据类型。

1. 准备XSD和XML字符串

假设你有一个XSD文件(或字符串)定义了期望的结构:

<?xml version=”1.0″?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
  <xs:element name=”Person”>
    <xs:complexType>
      <xs:sequence>
        <xs:element name=”Name” type=”xs:string”/>
        <xs:element name=”Age” type=”xs:int”/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

对应的合法XML示例:

<?xml version=”1.0″?>
<Person>
  <Name>张三</Name>
  <Age>25</Age>
</Person>

2. 使用XmlReader进行验证

下面是完整的C#代码片段,用于验证XML字符串是否符合XSD:

C#怎么验证一个XML字符串是否符合XSD规范_C#编程验证XML与XSD schema一致性

阿里云-虚拟数字人

阿里云-虚拟数字人是什么? …

C#怎么验证一个XML字符串是否符合XSD规范_C#编程验证XML与XSD schema一致性2

查看详情 C#怎么验证一个XML字符串是否符合XSD规范_C#编程验证XML与XSD schema一致性

using System; using System.IO; using System.Xml; using System.Xml.Schema;  public class XmlValidator {     public static bool ValidateXmlAgainstXsd(string xml, string xsd)     {         bool isValid = true;         var settings = new XmlReaderSettings();          // 加载XSD         using (var schemastream = new StringReader(xsd))         using (var xsdReader = XmlReader.Create(schemaStream))         {             var schemas = new XmlSchemaSet();             schemas.Add("", xsdReader);  // 添加到命名空间为空的schema中             settings.Schemas = schemas;             settings.ValidationType = ValidationType.Schema;         }          // 设置验证错误处理         settings.ValidationEventHandler += (sender, e) =>         {             Console.WriteLine($"验证错误: {e.Message}");             isValid = false;         };          // 读取并验证XML         using (var xmlReader = XmlReader.Create(new StringReader(xml), settings))         {             try             {                 while (xmlReader.Read()) { }             }             catch (XmlException ex)             {                 Console.WriteLine($"XML格式错误: {ex.Message}");                 isValid = false;             }         }          return isValid;     } }

3. 调用示例

如何使用上面的方法:

string xsd = @"<?xml version=""1.0""?> <xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"">   <xs:element name=""Person"">     <xs:complexType>       <xs:sequence>         <xs:element name=""Name"" type=""xs:string""/>         <xs:element name=""Age"" type=""xs:int""/>       </xs:sequence>     </xs:complexType>   </xs:element> </xs:schema>";  string validXml = @"<?xml version=""1.0""?> <Person>   <Name>李四</Name>   <Age>30</Age> </Person>";  string invalidXml = @"<?xml version=""1.0""?> <Person>   <Name>王五</Name>   <Age>abc</Age>  <!-- 类型错误 --> </Person>";  Console.WriteLine(ValidateXmlAgainstXsd(validXml, xsd));   // 输出: True Console.WriteLine(ValidateXmlAgainstXsd(invalidXml, xsd)); // 输出: False,并打印错误信息

4. 关键点说明

  • ValidationEventHandler:必须订阅此事件,否则即使有错误也不会中断或捕获。
  • XmlSchemaSet:可加载多个XSD,支持复杂架构合并。
  • StringReader:方便将字符串当作流处理,适用于内存中的XSD或XML。
  • ValidationType.Schema:明确指定按XSD规则验证。

基本上就这些。只要正确设置XmlReaderSettings并处理验证事件,就能可靠判断XML字符串是否符合XSD规范。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources