私は、sax を使用するときに xml ファイルを検証できることを知っています。しかし、Stax を使用するときに検証できますか?
17558 次
3 に答える
22
SAX と DOM で可能な XML 検証には、次の 2 つの方法があります。
- 単独で検証- Validator.validate()経由
- 解析中の検証- DocumentBuilderFactory.setSchema()およびSAXParserFactory.setSchema()経由
StAX では、検証は可能ですが、それを行う最初の方法のみです。
次のようなことを試すことができます:
import javax.xml.validation.*;
import javax.xml.transform.stax.*;
import javax.xml.stream.*;
import javax.xml.*;
import java.io.*;
public class StaxValidation {
public static void main (String args[]) throws Exception {
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream("test.xml"));
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("test.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StAXSource(reader));
//no exception thrown, so valid
System.out.println("Document is valid");
}
}
于 2011-05-17T13:56:59.323 に答える
20
1 回のパスで StAX を使用して解析および検証できます。javax.xml.stream.util.StreamReaderDelegate を使用します。
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream ("test.xml"));
reader = new StreamReaderDelegate(reader) {
public int next() throws XMLStreamException {
int n = super.next();
// process event
return n;
}};
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("test.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StAXSource(reader));
バリデーターは、reader.next() を呼び出して test.xml を読み取り、解析イベントを通常どおり処理します。
于 2012-11-17T04:09:50.117 に答える
2
これを行う標準的な方法はありません。ただし、Sun の MSV (マルチ スキーマ検証) を使用した検証をサポートする StAX2 という API 拡張機能があります。Woodstox StAX2 実装を使用することをお勧めします。
于 2011-04-26T16:58:36.117 に答える