2017-03-27 7 views
0

私はこの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) =>{}); 
+0

これは重複していますか? [XDocument.Validateは常に成功します](https://stackoverflow.com/q/17232575/3744182)。 – dbc

+0

hm ...確信が持てません...あなたはC#の検証コードでその問題を考えていますか? – Kira

答えて

0

結果。

Validate()は、警告ではなくエラーのみをキャッチします。

XMLReaderが(XMLおよびXSDは異なる名前空間を持っている場合は、XSD

でXMLを確認し検証するために、より多くのオプションを持っている)は常にtrueになります。 これを修正するには、両方のファイルから名前空間を削除するか、同じ名前空間を作成する必要があります。