xsd验证限制根元素

时间:2017-03-27 06:21:10

标签: c# xml xsd

我有这个xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
  <xsd:element name="F">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="A" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

此xml有效,但错误

<F><F>
<A/>
</F></F>

我必须只对这个xml有效

<F>
   <A/>
</F>

如何在xsd中执行此操作?

C#代码

XmlDocument xml = new XmlDocument();
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(xml)))
    {
      xml.Load(ms);
    }

XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", xsdpath);
XDocument _xml = XDocument.Parse(xml.OuterXml);
_xml.Validate(schemas, (o, e) =>{});

1 个答案:

答案 0 :(得分:0)

结果。

Validate()仅捕获错误,而不捕获警告。

xmlReader有更多选项可以通过xsd检查xml

如果xml和xsd具有不同的命名空间,则validate()将始终为true。 要修复它,您应该从两个文件中删除命名空间或写入相同的命名空间。