2006年11月的归档

利用Java API校验和解析XML

| | 评论(0)
前段时间因为使用到java进行xml的解析和校验,现在做一个小小的总结:

使用JDOM校验:


但是由于JDOM没有自己的解析器,它使用标准的解析器(如Xerces)来完成这个工作。如果想要进行schema校验必须确保选择了支持这个schema的解析器。
代码如下:
SAXBuilder builder =
  new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
builder.setFeature(
  "http://apache.org/xml/features/validation/schema", true);
builder.setProperty(
  "http://apache.org/xml/properties/schema/external-schemaLocation",
  "http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " " +
  "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd");
Document doc = builder.build(xml);

如果你想要使用JAXP来选择解析器,可以跳过指定类到SAXBuilder结构和用"org.apache.xerces.jaxp.SAXParserFactoryImpl"代替" javax.xml.parsers.SAXParserFactory"作为系统属性。这就告诉JAXP使用Xerces的 factory来创建解析器。可以用命令行来指定这个属性:
java -Djavax.xml.parsers.SAXParserFactory=
          org.apache.xerces.jaxp.SAXParserFactoryImpl

以上内容摘自http://www.jdom.org/docs/faq.html   How do I validate against a schema when using JDOM?

使用JAXP进行校验:


代码如下:
    // 1. Lookup a factory for the W3C XML Schema language
        SchemaFactory factory =
            SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
       
        // 2. Compile the schema.
        // Here the schema is loaded from a java.io.File, but you could use
        // a java.net.URL or a javax.xml.transform.Source instead.
        File schemaLocation = new File("/opt/xml/docbook/xsd/docbook.xsd");
        Schema schema = factory.newSchema(schemaLocation);
   
        // 3. Get a validator from the schema.
        Validator validator = schema.newValidator();
       
        // 4. Parse the document you want to check.
        Source source = new StreamSource(args[0]);
       
        // 5. Check the document
        try {
            validator.validate(source);
            System.out.println(args[0] + " is valid.");
        }
        catch (SAXException ex) {
            System.out.println(args[0] + " is not valid because ");
            System.out.println(ex.getMessage());
        } 

如果要使用xml自身指定的xsd进行校验,则使用下面的方法:
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = factory.newSchema();
这种方法仅适用于 XSD。

参考文章:
 Java 语言的 XML 验证 API (www.ibm.com/developerworks/cn/xml/x-javaxmlvalidapi.html)
 JAXP 专述(www-128.ibm.com/developerworks/cn/xml/jaxp/)

用JAXP解析xml:
               DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              DocumentBuilder parser = factory.newDocumentBuilder();
              org.w3c.dom.Document doc = parser.parse("temp.xml");
              //获得根节点元素
              Node record=doc.getFirstChild();


由于对xml没有系统的理解,以上仅为粗糙可用的代码,并不理解其中的原理,有待进一步学习。
具体代码见:http://210.34.4.9:8080/svn/SvnTest/datacheck1.0/

推荐几首歌

| | 评论(0)
厦大学生的原创,比起专业歌手是有不足之处,但是作为原创已经很是难得了。

下载地址:http://www.pb-cn.com
推荐曲目:perfect boy、一剪梅、圣诞日记