如题。用的什么包。。具体点。。比如。用什么来验证xml的有效性。和把解析xml文档。

解决方案 »

  1.   

    好像是sax解析,具体的不太清楚了,弄的错的配置文件跑一下,就能看到出异常的类,自己试试吧。
      

  2.   

    用的jdk里的rt.jar下的org.w3c.dom代码在org\springframework\util\xml目录下
      

  3.   

     为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。package com.alisoft.facepay.framework.bean;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    /**
     * 
     * @author hongliang.dinghl
     * DOM生成与解析XML文档
     */
    public class DomDemo implements XmlDocument {
        
        private Document document;
     
        private String fileName;
     
        public void init() {
           try {
               DocumentBuilderFactory factory = DocumentBuilderFactory
                      .newInstance();
               DocumentBuilder builder = factory.newDocumentBuilder();
               this.document = builder.newDocument();
           } catch (ParserConfigurationException e) {
               System.out.println(e.getMessage());
           }
        }
     
        public void createXml(String fileName) {
     
           Element root = this.document.createElement(“employees”);
           this.document.appendChild(root);
           Element employee = this.document.createElement(“employee”);
           Element name = this.document.createElement(“name”);
           name.appendChild(this.document.createTextNode(“丁宏亮“));
           employee.appendChild(name);
           Element sex = this.document.createElement(“sex”);
           sex.appendChild(this.document.createTextNode(“m”));
           employee.appendChild(sex);
           Element age = this.document.createElement(“age”);
           age.appendChild(this.document.createTextNode(“30″));
           employee.appendChild(age);
           root.appendChild(employee);
     
           TransformerFactory tf = TransformerFactory.newInstance();
           try {
               Transformer transformer = tf.newTransformer();
               DOMSource source = new DOMSource(document);
               transformer.setOutputProperty(OutputKeys.ENCODING, “gb2312″);
               transformer.setOutputProperty(OutputKeys.INDENT, “yes”);
               PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
               StreamResult result = new StreamResult(pw);
               transformer.transform(source, result);
               System.out.println(“生成XML文件成功!”);
           } catch (TransformerConfigurationException e) {
     
               System.out.println(e.getMessage());
           } catch (IllegalArgumentException e) {
     
               System.out.println(e.getMessage());
           } catch (FileNotFoundException e) {
     
               System.out.println(e.getMessage());
           } catch (TransformerException e) {
     
               System.out.println(e.getMessage());
           }
     
        }
     
        public void parserXml(String fileName) {
           try {
               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
               DocumentBuilder db = dbf.newDocumentBuilder();
               Document document = db.parse(fileName);
               NodeList employees = document.getChildNodes();
               for (int i = 0; i < employees.getLength(); i++) {
                  Node employee = employees.item(i);
                  NodeList employeeInfo = employee.getChildNodes();
                  for (int j = 0; j < employeeInfo.getLength(); j++) {
                      Node node = employeeInfo.item(j);
                      NodeList employeeMeta = node.getChildNodes();
                      for (int k = 0; k < employeeMeta.getLength(); k++) {
                         System.out.println(employeeMeta.item(k).getNodeName()
                                + “:” + employeeMeta.item(k).getTextContent());
                      }
                  }
               }
               System.out.println(“解析完毕“);
           } catch (FileNotFoundException e) {
               System.out.println(e.getMessage());
           } catch (ParserConfigurationException e) {
               System.out.println(e.getMessage());
           } catch (SAXException e) {
               System.out.println(e.getMessage());
           } catch (IOException e) {
               System.out.println(e.getMessage());
           }
         }
    }
      

  4.   

    为解决DOM的问题,出现了SAX。SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;package com.alisoft.facepay.framework.bean;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    /**
     * 
     * @author hongliang.dinghl
     * SAX文档解析
     */
    public class SaxDemo implements XmlDocument {
     
        public void createXml(String fileName) {
            System.out.println(“<<”+filename+“>>”);
        }
     
        public void parserXml(String fileName) {
           SAXParserFactory saxfac = SAXParserFactory.newInstance();
     
           try {
     
               SAXParser saxparser = saxfac.newSAXParser();
     
               InputStream is = new FileInputStream(fileName);
     
               saxparser.parse(is, new MySAXHandler());
     
           } catch (ParserConfigurationException e) {
     
               e.printStackTrace();
     
           } catch (SAXException e) {
     
               e.printStackTrace();
     
           } catch (FileNotFoundException e) {
     
               e.printStackTrace();
     
           } catch (IOException e) {
     
               e.printStackTrace();
     
           }
     
        }
     
    }
     
    class MySAXHandler extends DefaultHandler {
     
        boolean hasAttribute = false;
     
        Attributes attributes = null;
     
        public void startDocument() throws SAXException {
     
           System.out.println(“文档开始打印了“);
     
        }
     
        public void endDocument() throws SAXException {
     
           System.out.println(“文档打印结束了“);
     
        }
     
        public void startElement(String uri, String localName, String qName,
     
        Attributes attributes) throws SAXException {
     
           if (qName.equals(“employees”)) {
     
               return;
     
           }
     
           if (qName.equals(“employee”)) {
     
               System.out.println(qName);
     
           }
     
           if (attributes.getLength() > 0) {
     
               this.attributes = attributes;
     
               this.hasAttribute = true;
     
           }
     
        }
      

  5.   

    sax解析,根据异常来判断格式是否正确,
      

  6.   

    Struts1底层采用Digester解析struts-config.xml和web.xml,Digester采用的是SAX解析,位于commons包中,使用非常方便,值得研究下