Как проверить xml-файл на соответствие вложенному xsd в c # - PullRequest
0 голосов
/ 14 июня 2019

У меня есть XML-файл, который необходимо проверить по xsd (файлу), который, в свою очередь, включает в себя еще несколько xsd, которые находятся в том же каталоге, что и основной xsd.Как я проверю xml на Xsd, чтобы внутренний xsd также учитывался при проверке?

код для проверки xml

var xdoc = XDocument.Load(TextReader);
var schemas = new XmlSchemaSet();
schemas.Add("example.com/rules-engine-configuration.xsd", xsdFilePath);

                try
                {
                    string msg = "";
                    xdoc.Validate(schemas, (sender, args) =>
                    {
                        msg += args.Severity.ToString() + ":" + args.Message + " Line Number :" + args.Exception.LineNumber + " Line Position:" + args.Exception.LinePosition + Environment.NewLine;
                    });
                }

Здесь MSG дает как "", что означает его проанализированныйвместо того, чтобы показывать исключения.

Ниже приведен основной файл XSD, а тег xs: include содержит другой файл XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="example.com/rules-engine-configuration.xsd"
    elementFormDefault="qualified"
    xmlns="example.com/rules-engine-configuration.xsd"
    xmlns:mstns="example.com/rules-engine-configuration.xsd"
    xmlns:xs="example.com/2001/XMLSchema"
>
  <xs:include schemaLocation="RulesEngineSimpleTypes.xsd" />
  <xs:include schemaLocation="RulesEngineActivities.xsd" />
  <xs:include schemaLocation="RulesEngineAttributes.xsd" />
  <xs:include schemaLocation="RulesEngineCriteria.xsd" />
  <xs:include schemaLocation="RulesEngineEodSettings.xsd" />
  
  
  <!-- ===================== Common Simple Types ===================== -->
  <xs:simpleType name="EnvironmentType">
    <xs:annotation>
      <xs:documentation>A string of comma-separated values like RTA, PDS .</xs:documentation>
    </xs:annotation>
...