新建一个Java类,实现通过 sax 读取xml文件,xml文件放在src根目录下,谢谢

解决方案 »

  1.   


      import org.xml.sax.Attributes;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.SAXException;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.parsers.SAXParser;
    import org.xml.sax.helpers.DefaultHandler;
            class SAXTest extends DefaultHandler{
                private StringBuffer buffer=new StringBuffer();
                public void parseURI(String uri)
                {
                    try
                    {
                        SAXParserFactory spf = SAXParserFactory.newInstance();
                        SAXParser sp = spf.newSAXParser();
                        sp.parse(uri,this);
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                /** Start document. */
                public void startDocument()
                { 
                    buffer.append("< ?xml version=\"1.0\"?>");
                } 
                /** Start element. */
                public void startElement(String namespaceURI, String localName,
                                         String rawName, Attributes attrs)
                {
                    buffer.append("< ");
                    buffer.append(rawName);
                    if (attrs != null)
                    {
                        int len = attrs.getLength();
                        for (int i = 0; i < len; i++)
                        {
                            buffer.append(" ");
                            buffer.append(attrs.getQName(i));
                            buffer.append("=\"");
                            buffer.append(attrs.getValue(i));
                            buffer.append("\"");
                        }
                    }
                    buffer.append(">");
                }
                /** Characters. */
                public void characters(char ch[], int start, int length)
                {
                    buffer.append(new String(ch, start, length));
                }
                /** Ignorable whitespace. */
                public void ignorableWhitespace(char ch[], int start, int length)
                {
                    characters(ch, start, length);
                }
                /** End element. */
                public void endElement(String namespaceURI, String localName,
                                       String rawName)
                {
                    buffer.append("");
                } // endElement(String)
                /** End document. */
                public void endDocument()
                {
                }
                /** Processing instruction. */
                public void processingInstruction(String target, String data)
                {
                    buffer.append("< ?");
                    buffer.append(target);
                    if (data != null && data.length() > 0)
                    {
                        buffer.append(' ');
                        buffer.append(data);
                    }
                    buffer.append("?>");
                }
                /** Returns a string of the location. */
                private String getLocationString(SAXParseException ex)
                {
                    StringBuffer str = new StringBuffer();
                    String systemId = ex.getSystemId();
                    if (systemId != null)
                    {
                        int index = systemId.lastIndexOf('/');
                        if (index != -1)
                            systemId = systemId.substring(index + 1);
                        str.append(systemId);
                    }
                    str.append(':');
                    str.append(ex.getLineNumber());
                    str.append(':');
                    str.append(ex.getColumnNumber());
                    return str.toString();
                }
              public static void main(String args[]){
               SAXTest st=new SAXTest();
               st.parseURI("student.xml");
              System.out.println(st.buffer.toString());
            }
            }
      

  2.   

    运行报错java.io.FileNotFoundException: D:\JAVA\workspace\Stu_DWR\Student.xml (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at test.解析xml文件.SAXTest.parseURI(SAXTest.java:20)
    at test.解析xml文件.SAXTest.main(SAXTest.java:104)文件在src根目录下: Student.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <person> 
    <name>王小明</name> 
    <college>信息学院</college> 
    <telephone>6258113</telephone> 
    <notes>男,1955年生,博士,95年调入海南大学</notes> 
    </person>
    如果在src下test包中,如何写路径
    请大侠指教,谢谢了
      

  3.   


    你看一下这个例子
    import java.io.*;
    import java.net.*;
    import javax.xml.parsers.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;/**
     * This program demonstrates how to use a SAX parser. The program prints all hyperlinks links of an
     * XHTML web page. <br>
     * Usage: java SAXTest url
     * @version 1.00 2001-09-29
     * @author Cay Horstmann
     */
    public class SAXTest
    {
       public static void main(String[] args) throws Exception
       {
          String url;
          if (args.length == 0)
          {
             url = "http://www.w3c.org";
             System.out.println("Using " + url);
          }
          else url = args[0];      DefaultHandler handler = new DefaultHandler()
             {
                public void startElement(String namespaceURI, String lname, String qname,
                      Attributes attrs)
                {
                   if (lname.equals("a") && attrs != null)
                   {
                      for (int i = 0; i < attrs.getLength(); i++)
                      {
                         String aname = attrs.getLocalName(i);
                         if (aname.equals("href")) System.out.println(attrs.getValue(i));
                      }
                   }
                }
             };      SAXParserFactory factory = SAXParserFactory.newInstance();
          factory.setNamespaceAware(true);
          SAXParser saxParser = factory.newSAXParser();
          InputStream in = new URL(url).openStream();
          saxParser.parse(in, handler);
       }
    }
      

  4.   

    String dirBase = System.getProperty("user.dir")
    dirBase +"/" +src/Student.xml
      

  5.   

    Using http://www.w3c.org
    Exception in thread "main" java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
    at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at test.解析xml文件.SAXTest.main(SAXTest.java:44)
    还是报错如何取出xml文件中的内容,请大侠指教,谢谢
      

  6.   

    可以设置为不验证doctype 。
      

  7.   

    1、先下载:jdom-1.0.jar、dom4j-1.7.jar 这两个包引入到项目中
    2、代码如下:MyXMLReader.java
    import java.io.File;
    import java.util.Iterator;
    import java.util.List;import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;import org.dom4j.io.SAXReader;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.xml.sax.Attributes;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;public class MyXMLReader extends DefaultHandler {java.util.Stack tags = new java.util.Stack();
    String path = "xmltest.xml";
    //windows 系统获取路径
    String rpath = MyXMLReader.class.getResource("").getPath().substring(1)
    + path;public MyXMLReader() {
    super();
    System.out.println("rpath:"+rpath);
    }/**
    * DOM方式
    * @since V2.0
    * @author David.Wei
    * @date 2008-4-11
    * @return void
    */
    public void DOM() {
    long lasting = System.currentTimeMillis();try {
    File f = new File(rpath);
    DocumentBuilderFactory factory = DocumentBuilderFactory
    .newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(f);
    NodeList nl = doc.getElementsByTagName("node");
    for (int i = 0; i < nl.getLength(); i++) {
    System.out.println("|| Name: |"
    + doc.getElementsByTagName("name").item(i)
    .getFirstChild().getNodeValue());
    System.out.println("||Space: |"
    + doc.getElementsByTagName("space").item(i)
    .getFirstChild().getNodeValue());
    System.out.println("-------------------------------------------------"); }
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("DOM RUNTIME:"
    + (System.currentTimeMillis() - lasting) + " MS");
    }/**
    * SAX方式
    * @since V2.0
    * @author David.Wei
    * @date 2008-4-11
    * @return void
    */
    public void SAX() {long lasting = System.currentTimeMillis();
    try {
    SAXParserFactory sf = SAXParserFactory.newInstance();
    SAXParser sp = sf.newSAXParser();
    MyXMLReader reader = new MyXMLReader();
    sp.parse(new InputSource(rpath), reader);
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("SAX RUNTIME:"
    + (System.currentTimeMillis() - lasting) + " MS");
    }public void startElement(String uri, String localName, String qName,
    Attributes attrs) {
    tags.push(qName);
    }public void characters(char ch[], int start, int length)
    throws SAXException {
    String tag = (String) tags.peek();
    if (tag.equals("name")) {
    System.out.println("|| Name: |" + new String(ch, start, length));
    }
    if (tag.equals("space")) {
    System.out.println("||Space: |" + new String(ch, start, length));
    }
    System.out.println("-------------------------------------------------");
    }/**
    * JDOM方式
    * @since V2.0
    * @author David.Wei
    * @date 2008-4-11
    * @return void
    */
    public void JDOM() {
    long lasting = System.currentTimeMillis();
    try {
    SAXBuilder builder = new SAXBuilder();
    org.jdom.Document doc = builder.build(new File(rpath));
    Element foo = doc.getRootElement();
    List allChildren = foo.getChildren();
    for (int i = 0; i < allChildren.size(); i++) {
    System.out.println("|| Name: |"
    + ((Element) allChildren.get(i)).getChild("name")
    .getText());
    System.out.println("||Space: |"
    + ((Element) allChildren.get(i)).getChild("space")
    .getText());
    System.out.println("-------------------------------------------------"); }
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("JDOM RUNTIME:"
    + (System.currentTimeMillis() - lasting) + " MS");
    }/**
    * DOM4J方式
    * @since V2.0
    * @author David.Wei
    * @date 2008-4-11
    * @return void
    */
    public void DOM4J() {
    long lasting = System.currentTimeMillis();
    try {
    File f = new File(rpath);
    SAXReader reader = new SAXReader();
    org.dom4j.Document doc = reader.read(f);
    org.dom4j.Element root = doc.getRootElement();
    org.dom4j.Element foo;
    for (Iterator i = root.elementIterator("node"); i.hasNext();) {
    foo = (org.dom4j.Element) i.next();
    System.out.println("|| Name: |" + foo.elementText("name"));
    System.out.println("||Space: |" + foo.elementText("space"));
    System.out.println("-------------------------------------------------");
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("DOM4J RUNTIME:"
    + (System.currentTimeMillis() - lasting) + " MS");
    }public static void main(String arge[]) {
    MyXMLReader myXML = new MyXMLReader();
    System.out.println("=====================DOM=========================");
    myXML.DOM();
    System.out.println("=====================SAX=========================");
    myXML.SAX();
    System.out.println("=====================JDOM========================");
    myXML.JDOM();
    System.out.println("=====================DOM4J=======================");
    myXML.DOM4J();
    System.out.println("=================================================");
    }
    }3、xmltest.xml
    <?xml version="1.0" encoding="gbk"?>
    <list>
    <node>
    <name>weidewei</name>
    <space>http://wishlife.javaeye.com</space>
    </node>
    <node>
    <name>flying</name>
    <space>http://user.qzone.qq.com/94611981</space>
    </node>
    </list>备注:xmltest.xml在src目录下
    以上代码应该能满足你需求
      

  8.   

    运行发生异常rpath:D:/JAVA/workspace/Test/WebRoot/WEB-INF/classes/%e8%af%bb%e5%8f%96xml%e6%96%87%e4%bb%b6/xmltest.xml
    =====================SAX=========================
    rpath:D:/JAVA/workspace/Test/WebRoot/WEB-INF/classes/%e8%af%bb%e5%8f%96xml%e6%96%87%e4%bb%b6/xmltest.xml
    java.io.FileNotFoundException: D:\JAVA\workspace\Test\WebRoot\WEB-INF\classes\读取xml文件\xmltest.xml (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at 读取xml文件.MyXMLReader.SAX(MyXMLReader.java:80)
    at 读取xml文件.MyXMLReader.main(MyXMLReader.java:107)
    SAX RUNTIME:31 MS
      

  9.   

    String str = xxx.class.getResource("/Student.xml").getPath();  //路径;