在xml文檔包含模式的情況下,我在使用xml模式驗證xml文件時遇到了問題。 xml文件看起來像:如何在xsd裏面驗證xml?
<?xml version="1.0"?>
<catalog xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:x="urn:book">
<!-- START OF SCHEMA -->
<xsd:schema targetNamespace="urn:book">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="author" type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="genre" type="xsd:string"/>
<xsd:element name="price" type="xsd:float"/>
<xsd:element name="publish_date" type="xsd:date"/>
<xsd:element name="description" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<!-- END OF SCHEMA -->
<x:book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with
XML.</description>
</x:book>
</catalog>
java代碼看起來像:
// define the type of schema - we use W3C:
String schemaLang = "http://www.w3.org/2001/XMLSchema";
// get validation driver:
SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
// create schema by reading it from an XSD file:
Schema schema = factory.newSchema(new StreamSource("..........."));
Validator validator = schema.newValidator();
// at last perform validation:
validator.validate(new StreamSource("myDoc.xml"));
而且對我來說,問題是如何在這種情況下使用SchemaFactory對象?
我很樂意爲您提供幫助!
首先要注意的是:根據模式,您的文檔無效。這是因爲模式將'book'定義爲根元素,而您的文檔具有'catalog'作爲根元素。所以基本上,您需要將文檔分爲兩部分,架構和內容。有多種方法可以實現這一點;您可以使用XSL轉換,或通過DOM API處理文檔。 – flyx 2012-02-01 19:59:14
有一個[類似的問題(http://stackoverflow.com/q/8643904/433835)不是很久以前,如果有人想驗證對_big ol'_ XML模式架構XML XSD文件架構,參見[我的答案](http://stackoverflow.com/a/8644427/433835)這個,也許它可以幫助。基本上,您需要提供_big ol'_模式以及您的文檔模式。這可以通過向SchemaFactory.newSchema(StreamSource [])提供多個模式來完成。 – 2012-02-01 20:05:31