zoukankan      html  css  js  c++  java
  • c# : use xsd 校验 xml

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Xml;
     6 using System.Diagnostics;
     7 using System.Xml.Schema;
     8 using System.Xml.Linq;
     9 
    10 namespace XsdValidator
    11 {
    12     class Program
    13     {
    14         static void Main(string[] args)
    15         {
    16             
    17             //Debug.Assert(false);
    18             InputArgumentParser.Instance.AppName = "XsdValidator";
    19             InputArgumentParser.Instance.Register("xml"typeof(String), falsefalsenull);
    20             InputArgumentParser.Instance.Register("xsd"typeof(String), truetruenull);
    21             try
    22             {
    23                 InputArgumentParser.Instance.ParseInput(args);
    24             }
    25             catch (Exception ex)
    26             {
    27                 Console.Error.WriteLine("Error: " + ex.Message);
    28                 Console.WriteLine();
    29                 InputArgumentParser.Instance.PrintUsage();
    30                 return;
    31             }
    32             XmlReaderSettings settings = new XmlReaderSettings();
    33             settings.ValidationType = ValidationType.Schema;
    34             //http://msdn.microsoft.com/en-us/library/system.xml.schema.xmlschemavalidationflags.aspx
    35             settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
    36             settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
    37             settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
    38             settings.ValidationFlags |= XmlSchemaValidationFlags.AllowXmlAttributes;
    39             String strXmlFile = InputArgumentParser.Instance.GetStringArg("xml");
    40 
    41             foreach (String strXsdFile in InputArgumentParser.Instance.GetStringArgArray("xsd"))
    42             {
    43                 //String strXsdFile = @"c:\temp\unqualified_1.xsd";
    44                 //String strXmlFile = @"c:\temp\test1_unqualified.xml";
    45 
    46                 System.Console.WriteLine("Adding XSD:" + strXsdFile);
    47                 XDocument xdocXSD = XDocument.Load(strXsdFile);
    48                 var e = xdocXSD.Element(XName.Get("{http://www.w3.org/2001/XMLSchema}schema"));
    49                 XAttribute attr = e.Attribute("targetNamespace");
    50 
    51                 string namespaceUrl = null;
    52                 if (attr != null)
    53                     namespaceUrl = attr.Value;
    54                 settings.Schemas.Add(namespaceUrl, strXsdFile);
    55             }
    56             settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
    57 
    58             XmlReader reader = XmlReader.Create(strXmlFile, settings);
    59             try
    60             {
    61                 while (reader.Read())
    62                 {/*
    63                     if (reader.IsStartElement())
    64                     {
    65                         Console.WriteLine("Begin Element " + reader.Name);
    66                     }
    67                   */
    68                 }
    69             }
    70             catch (XmlException ex)
    71             {
    72                 Console.Error.WriteLine("Error: [" + ex.Message + "]");
    73             }
    74             finally
    75             {
    76                 reader.Close();
    77             }
    78         }
    79         static void settings_ValidationEventHandler(object sender
    80             , System.Xml.Schema.ValidationEventArgs e)
    81         {
    82             Console.Error.WriteLine(e.Severity == XmlSeverityType.Error? "Error" : "Warning" + ": [" + e.Message + "]\n");
    83         }
    84     }//class
    85 }
  • 相关阅读:
    Node.js 究竟是什么?
    天津自考学习之“六步看书法”
    C专家编程cdecl
    Linux系统启动流程及安装命令行版本
    Java学习路线
    GCC内置宏
    GMP
    二级存储构建倒排索引
    余弦距离与欧式距离
    af
  • 原文地址:https://www.cnblogs.com/sliencer/p/2416717.html
Copyright © 2011-2022 走看看