我試圖根據XML模式驗證XML節點或片段。我讀這篇文章:通過XSD文件驗證XML節點
Validating xml nodes, not the entire document
,但選擇的解決方案並不像爲我工作。
private void ValidateSubnode(XmlNode node, XmlSchema schema)
{
XmlTextReader reader = new XmlTextReader(node.OuterXml, XmlNodeType.Element, null);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.Schemas.Add(schema);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(XSDValidationEventHandler);
XmlReader validationReader = XmlReader.Create(reader, settings);
while (validationReader.Read())
{
}
}
private void XSDValidationEventHandler(object sender, ValidationEventArgs args)
{
errors.AppendFormat("XSD - Severity {0} - {1}",
args.Severity.ToString(), args.Message);
}
至極是,據我所看到的,用於驗證碼的完整的文檔,但與「ConformanceLevel.Fragment」
因此,例如,具有一個模式像這樣簡單:
<Customer>
<Address>
<Line1>Foo</Line1>
<Line2>Foo2</Line2>
</Address>
</Customer>
但是,任何內節點不驗證
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<xsd:element name="Customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Line1" type="xsd:string" />
<xsd:element name="Line2" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
甲 '根' 節點驗證OK
<Address>
<Line1>Foo</Line1>
<Line2>Foo2</Line2>
</Address>
我收到錯誤:「‘地址’元素未聲明」
有什麼我失蹤?
僅供參考,你不應該使用'新的XmlTextReader()'或'新的XmlTextWriter()'。自.NET 2.0以來,它們已被棄用。改爲使用'XmlReader.Create()'或'XmlWriter.Create()'。 –