我正在尝试验证我之前写过的XML
XSD Schema
文件。验证我的xml文件的java代码如下所示。当我尝试验证XML时,我总是会收到如下错误:“无法找到根元素的声明”。
你能帮我解决这个问题吗?
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<AllBooks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://myNameSpace.com"
schemaLocation="http://myNameSpace.com book.xsd">
<book>
<id>1</id>
<title>aşk ve gurur</title>
<author>james brown</author>
<category>science</category>
<availablity>100</availablity>
<price>5000</price>
</book>
<book>
<id>2</id>
<title>kskkdn</title>
<author>mşlfke</author>
<category>love</category>
<availablity>50</availablity>
<price>5000</price>
</book>
</AllBooks>
架构文件
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com" elementFormDefault="qualified">
<xs:element name="AllBooks">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="category" type="xs:string"/>
<xs:element name="availability" type="xs:integer"/>
<xs:element name="price" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和java代码
static boolean validateAgainstXSD(InputStream xml, InputStream xsd)
{
try
{
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(xsd));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xml));
return true;
}
catch(Exception ex)
{
return false;
}
}
答案 0 :(得分:1)
您的命名空间在XSD和XML文件之间不匹配。此外,availability
拼写错误为XML文件中的availablity
。更正如下......
使用此XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://myNameSpace.com"
elementFormDefault="qualified">
<xs:element name="AllBooks">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="category" type="xs:string"/>
<xs:element name="availability" type="xs:integer"/>
<xs:element name="price" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然后,此固定的XML实例文档将有效:
<?xml version="1.0" encoding="UTF-8"?>
<AllBooks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://myNameSpace.com"
xsi:schemaLocation="http://myNameSpace.com book.xsd">
<book>
<id>1</id>
<title>aşk ve gurur</title>
<author>james brown</author>
<category>science</category>
<availability>100</availability>
<price>5000</price>
</book>
<book>
<id>2</id>
<title>kskkdn</title>
<author>mşlfke</author>
<category>love</category>
<availability>50</availability>
<price>5000</price>
</book>
</AllBooks>