在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