微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java代码进行XML验证

我需要一些代码示例,该示例说明如何针对架构验证xml文件.下面是我的XML文档:

<birthdate>
    <month>January</month>
    <day>21</day>
    <year>1983</year>
</birthdate>

我要针对其验证上述XML的架构是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2001/xml.xsd" />

  <xs:element name="birthdate">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="month" type="xs:string" />
        <xs:element name="day" type="xs:int" />
        <xs:element name="year" type="xs:int" />
      </xs:sequence>  
    </xs:complexType>
  </xs:element>
</xs:schema>

现在有人可以帮助我编写Java代码,如果XML文档按照我指定的模式有效,则将这些代码作为输入并提供适当的输出

现在,我在理解以下代码时遇到问题,例如MySAXHandler上的方法如何被调用,因为该类未实例化,并且未显式调用方法.
谁能解释?
而且还有什么方法可以直接传递文件而不是通过字符串传递.

代码是-

import java.io.StringReader;

import javax.xml.XMLConstants;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
import javax.xml.validation.SchemaFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class XMLval {
  public static void main(String args[])throws Exception {
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser parser = null;
    spf.setNamespaceAware(true);
    try {
     SchemaFactory sf =
                     SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     spf.setSchema(sf.newSchema(new SAXSource(new InputSource(new StringReader(schemaString)))));
 parser = spf.newSAXParser();
}
catch(SAXException e) {
  e.printstacktrace(System.err);
  System.exit(1);    
} 
catch(ParserConfigurationException e) {
  e.printstacktrace(System.err);
  System.exit(1);    
}
MySAXHandler handler = new MySAXHandler(); 
System.out.println(schemaString);
parser.parse(new InputSource(new StringReader(xmlString)), handler);


}



static String xmlString = "<?xml version=\"1.0\"?>" +
  "<birthdate>" +
  "<month>January</month>" +
  "<day>21</day>" +
  "<year>1983</year>" +
  "</birthdate>";



static String schemaString ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +

  "<xs:element name=\"birthdate\">" +
  "<xs:complexType>" +
  "<xs:sequence>" +
  "<xs:element name=\"month\" type=\"xs:string\"/>" +
  "<xs:element name=\"day\" type=\"xs:int\"/>" +
  "<xs:element name=\"year\" type=\"xs:int\" />" +
  "</xs:sequence>" +
                  "</xs:complexType>" +
                  "</xs:element>" +
                  "</xs:schema>";
}

class MySAXHandler extends DefaultHandler {
  public void startDocument() {
    System.out.println("Start document: ");
  }    
    public void endDocument()  {
    System.out.println("End document: ");
  }

  public void startElement(String uri, String localName, String qname, 
                                                               Attributes attr)
  {
    System.out.println("Start element: local name: " + localName + " qname: " 
                                                        + qname + " uri: "+uri);
    int attrCount = attr.getLength();
    if(attrCount>0) {
      System.out.println("Attributes:"); 
      for(int i = 0 ; i<attrCount ; i++) {
        System.out.println("  Name : " + attr.getQName(i)); 
        System.out.println("  Type : " + attr.getType(i)); 
        System.out.println("  Value: " + attr.getValue(i)); 
      }
    } 
  }

  public void endElement(String uri, String localName, String qname) {
    System.out.println("End element: local name: " + localName + " qname: "
                                                         + qname + " uri: "+uri);
  }

  public void characters(char[] ch, int start, int length) {
    System.out.println("Characters: " + new String(ch, start, length));
  }
}

解决方法:

您可以尝试JDOM库.

http://www.jdom.org/docs/faq.html#a0360

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。