使用Java代码进行XMLvalidation

我需要一些代码示例,它展示了如何针对模式validationxml文件。 以下是我的XML文档:

 January 21 1983  

我想要validation上述XML的模式是:

             

现在有人可以帮我编写Java代码,如果XML文档根据我指定的模式是有效的,那么它将把这些作为输入并给出正确的输出吗?

现在我有一个问题理解下面的代码,比如MySAXHandler上的方法如何调用becoz,类没有被实例化,方法也没有被明确地调用。 谁有人解释一下? 还有什么方法我可以直接传递文件而不是通过字符串。

代码是 –

 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 = "" + "" + "January" + "21" + "1983" + ""; static String schemaString ="" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; } 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