У меня есть 2 схемы XSD:C# Проверка XML
A.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myns" xmlns:myns="myns">
<xs:include schemaLocation="B.xsd"/>
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element ref="myns:B" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
и B.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myns">
<xs:element name="B" type="xs:string" />
</xs:schema>
И у меня есть 2 файла XML:
первый
<?xml version='1.0' encoding='utf-8' ?>
<A xmlns='myns'>
<B xmlns='myns'>sdf</B>
</A>
второй
<?xml version='1.0' encoding='utf-8' ?>
<B xmlns='myns'>sdf</B>
Я проверить XML с этим кодом
var schemas = new XmlSchemaSet();
schemas.Add("myns", "A.xsd");
xdoc.Validate(schemas, OnValidating);
Оба этих XML является действительным, но мне нужно, что первый XML является действительным, и второй нет. Как я могу это сделать?
XSD-схемы, поставляемые третьи стороны и не могут быть изменены.
Вы хотите недопустимый XML, который не проходит проверку? try xml version = '1.0' encoding = 'utf-8'?> sdf Это не удастся, так как для проверки требуется B, а не C. –
Да, C будет недействительным :) –
Мне нужна проверка отказов с элементом B во втором xml. 'XmlSchemaSet.Add()' загружает все схемы, соответствующие методам A.xsd и 'XDocument.Validate()', подтверждает, что xml соответствует одной из схем. Как я могу проверить только с помощью схемы A.xsd? –