我有以下的(errorous)XML:XSD驗證問題
<jobs>
<job>
<id>1</id>
<state><![CDATA[IL]]></state>
</job>
<job>
<id>2</id>
</job>
</jobs>
兩個ID,並reqired項目狀態節點。我寫了一個XSD吧:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="importvalidator"
elementFormDefault="qualified"
targetNamespace="http://foo.org/importvalidator.xsd"
xmlns="http://foo.org/importvalidator.xsd"
xmlns:mstns="http://foo.org/importvalidator.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="jobs">
<xs:complexType>
<xs:sequence>
<xs:element name="job" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="id" type="xs:string" minOccurs="1"/>
<xs:element name="state" type="xs:string" minOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
它仍然驗證作爲結構有效的XML。我在這裏錯過了什麼?
UPDATE1:我正在使用的代碼是C#:
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("http://foo.org/importvalidator.xsd", "validator.xsd");
XDocument doc = XDocument.Load(fileName);
if (doc == null | doc.Root == null)
{
throw new ApplicationException("xml error: the referenced stream is not xml.");
}
doc.Validate(schemas, (o, e) =>
{
throw new ApplicationException("xsd validation error: xml file has structural problems");
});
@ 13ren:我修正了他的格式,所以關閉的標籤是可見的。你有正確的答案:由於命名空間而不能驗證。 – 2009-05-31 16:36:13