Я пытаюсь проверить следующий Xml.
string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ROOT xmlns:bk=""urn:samples"">
<RandomName1>
<Element1>v</Element1>
<Element2>v</Element2>
<Element3>v</Element3>
<Element4>v</Element4>
</RandomName1>
<RandomName2>
<Element1>v</Element1>
<Element2>v</Element2>
<Element3>v</Element3>
<Element4>v</Element4>
</RandomName2>
</ROOT>";
RandomNameN
— любая строка. Я заинтересован в том, чтобы Element1 - Element4
присутствовал и правильно назывался, а также чтобы схема соответствовала.
Я пробовал следующее
string xsdMarkup =
@"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<xsd:element name='ROOT'>
<xsd:complexType>
<xsd:sequence>
<xsd:any>
<xsd:complexType>
<xsd:sequence>
<xsd:element name ='Element1'/>
<xsd:element name ='Element2'/>
<xsd:element name ='Element3'/>
<xsd:element name ='Element4'/>
</xsd:sequence>
</xsd:complexType>
</xsd:any>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));
var xDoc = XDocument.Parse(xml);
bool errors = false;
string msg = string.Empty;
xDoc.Validate(schemas, (o, e) =>
{
msg = e.Message;
errors = true;
});
Я получаю System.Xml.Schema.XmlSchemaException
Элемент 'http://www.w3.org/2001/XMLSchema:complexType' не поддерживается в этом контексте.
Мне также нужно знать, как сделать так, чтобы узлы RandomName1
не требовали имени, а присутствовали. Я пытался добиться этого через </xsd:any>
вместо </xsd:element>