我試圖把一些驗證代碼放在一起。我試圖驗證對像模式:對複雜類型的javax.xml.parsers.DocumentBuilder支持
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:choice="http://example.com/SimpleChoice" targetNamespace="http://example.com/SimpleChoice" ecore:nsPrefix="choice" ecore:package="com.example.simple.choice">
<xsd:complexType name="Plane">
<xsd:sequence>
<xsd:element name="freightDetails" type="xsd:string" minOccurs="0"/>
<xsd:element name="passengers" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
用下面的XML:
<?xml version="1.0" encoding="UTF-8"?>
<choice:Plane xmlns:choice="http://example.com/SimpleChoice">
<freightDetails>Boxes</freightDetails>
</choice:Plane>
這似乎抱怨是沒有的元素,但我試圖找到一種方法來驗證反對類型。我收到以下錯誤:
[Error] :1:100: cvc-elt.1: Cannot find the declaration of element 'choice:Plane'.
當試圖將文件用下面的代碼加載:
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(schemaFile);
DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
parserFactory.setSchema(schema);
parserFactory.setNamespaceAware(true);
DocumentBuilder parser = parserFactory.newDocumentBuilder();
Document document = parser.parse(inputSource);
Validator validator = schema.newValidator();
validator.validate(new DOMSource(document));
它時,它得到的失敗:
Document document = parser.parse(inputSource);
沒有人有關於如何才能做到這一點的任何想法? (或支持這種行爲的驗證?)
感謝
羅布
感謝您的建議,我曾嘗試以前有元素的情況下,他們確實工作。然而,我有一個情況,我想驗證這種類型,並希望有一種方式支持。 – Rob 2010-10-13 14:31:42
@RobL:不,這不是XML Schema的工作原理。您針對元素進行驗證,而不是類型。 – skaffman 2010-10-13 14:34:01