我正在尝试验证以下 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
我还需要知道如何使RandomName1
节点不需要名称而是存在。我试图通过</xsd:any>
而不是</xsd:element>