如何验证xml文件的有效性?
请求帮助,谢谢

解决方案 »

  1.   


    ////XSDTest.java:   
      import   javax.xml.parsers.DocumentBuilderFactory;   
      import   javax.xml.parsers.DocumentBuilder;   
      import   org.xml.sax.ErrorHandler;   
      import   org.xml.sax.SAXParseException;   
      import   org.w3c.dom.Document;   
        
      public   class   XSDTest   implements   ErrorHandler   
      {   
      public   static   void   main(String[]   args)   
      {   
      DocumentBuilderFactory   docBuilderFactory   =   null;   
      DocumentBuilder   docBuilder   =   null;     
        
      try   
      {   
      docBuilderFactory   =   DocumentBuilderFactory.newInstance();   
      docBuilderFactory.setValidating(true);   
      docBuilderFactory.setNamespaceAware(true);   
      docBuilder   =   docBuilderFactory.newDocumentBuilder();   
      docBuilder.setErrorHandler(new   XSDTest());   
      Document   doc   =   docBuilder.parse("WellFormed.xml");   
      }   
      catch(Exception   se)   
      {   
      se.printStackTrace();   
      }   
      }   
        
      public   void   error(SAXParseException   se)   
      {   
      System.out.println("Caught   an   error:"   +   se.getMessage());   
      //se.printStackTrace();   
      }   
        
      public   void   fatalError(SAXParseException   se)   
      {   
      System.out.println("Caught   an   fatal   error.");   
      se.printStackTrace();   
      }   
        
      public   void   warning(SAXParseException   se)   
      {   
      System.out.println("Caught   a   warning.");   
      se.printStackTrace();   
      }   
      }   
        
      ////WellFormed.xml   
      <?xml   version="1.0"   encoding="utf-8"?>   
      <Test     
      xmlns="WellFormed"   
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
      xsi:schemaLocation="WellFormed   WellFormed.xsd">   
              <Name>John   &lt;   Doe</Name>   
              <!--<temp/>-->   
      </Test>   
        
      ////WellFormed.xsd   
      <?xml   version="1.0"   ?>   
      <xs:schema     
      targetNamespace="WellFormed"   
      xmlns="WellFormed"   
          xmlns:xs="http://www.w3.org/2001/XMLSchema"   
          attributeFormDefault="qualified"   
          elementFormDefault="qualified">   
          <xs:element   name="Test">   
              <xs:complexType>   
                  <xs:sequence>   
                      <xs:element   name="Name"   type="xs:string"   minOccurs="0"   />   
                  </xs:sequence>   
              </xs:complexType>   
          </xs:element>   
      </xs:schema>
      

  2.   

    应该可以用一个dtd文件来验证的吧?
      

  3.   

    建立dtd文件来对xml定义规则然后使用dom4j,对文件进行验证
    document  =  DocumentHelper.createDocument();
    document.setDocType(new DefaultDocumentType("随便写,只是对DTD的描述","你的DTD文件的路径"));  FileInputStream is = new FileInputStream(file);
    InputStreamReader in = new InputStreamReader(is, "utf-8");
    SAXReader builder = new SAXReader();
    builder.setValidation(true);
    builder.setEntityResolver(new EntityResolver() {
    public InputSource resolveEntity(String publicId,
    String systemId) throws SAXException, IOException {
    InputSource is = new InputSource(
    "你的DTD文件所在路径");
    return is;
    } });
    注:也可以使用xmlspy对xml文件进行手工校验
      

  4.   

    不知你说的是用程序么,如果不是用程序的话,可以用软件比如xml writer
      

  5.   


    用sax不也一样吗,程序上没多大差别,具体的差别查一下API