1

こんにちは、これは私のxmlファイルで、xsdが内部として定義されています

<?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:element name="number" type="xsd:integer"/>
    </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>
      <number>123.4 </number>
   </x:book>
</catalog>

私はJavaでそれを検証したいのですが、Javaのコードの下に書いてあり、このxmlに対して完全に機能しています。

import java.io.*;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.*;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import javax.xml.xpath.*;
import org.xml.sax.InputSource;

public class TestValidation {
    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
        XPath xpath = XPathFactory.newInstance().newXPath();
        NodeList nodes = (NodeList)xpath.evaluate("/*/*", new InputSource("E:\\abc.xml"), XPathConstants.NODESET);
        SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        Validator validator = factory.newSchema(new DOMSource(nodes.item(0))).newValidator();
        try {
            validator.validate(new DOMSource(nodes.item(1)));
            System.out.println("XML is valid.");
        }
        catch (SAXException ex) {
            System.out.println("XML is not valid because " + ex.getMessage());
        }
    }
}

xsd を別の外部ファイルとして定義したいのですが、それを定義する方法を知っています。この xml からその xsd を呼び出す方法を見つけるのを手伝ってくれる人はいますか?その後、Java プログラムに変更を加える必要がありますか?

4

1 に答える 1

0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms759142%28v=vs.85%29.aspxの例に従っていると仮定します。そのexternal-namespaced.xmlとbooks2.xsdの例を使用できます。

XMLを検証するには、次の回答を使用してください。

複数の任意のスキーマに対してXMLを検証します

または、コードを変更してスキーマを直接ロードします

  Validator validator = factory.newSchema(new StreamSource(
      TestValidation.class.getResourceAsStream("/books2.xsd"))).newValidator();
  try {
     validator.validate(new DOMSource(nodes.item(0)));
     System.out.println("XML is valid.");
  } catch (SAXException ex) {
     System.out.println("XML is not valid because " + ex.getMessage());
  }
于 2012-06-07T07:56:09.767 に答える