2

以前に書いたもの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;
    }
}
4

1 に答える 1

1

XSD ファイルと XML ファイルの間で名前空間が一致しません。また、XML ファイルのavailabilityようにスペルが間違っています。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>
于 2013-10-21T16:00:27.707 に答える