2011-05-25 59 views
-3

我需要从xml文件中获取信息。
我的问题是我不能让从XML文件正确的响应SAX解析器中的问题

package com.xmlparser; 

import java.net.URL; 
import java.util.ArrayList; 

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.InputSource; 
import org.xml.sax.XMLReader; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class xmlparser extends Activity { 
    /** Called when the activity is first created. */ 
    detaset dt=null; 
    detaset Date; 
    ArrayList<String> Score; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     try 
     { 
     URL url = new URL("C://Users//nik//Desktop//a.xml"); 
     System.out.println(url); 
     TextView tv = new TextView(this); 
     /* Get a SAXParser from the SAXPArserFactory. */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 

     /* Get the XMLReader of the SAXParser we created. */ 
     XMLReader xr = sp.getXMLReader(); 
     /* Create a new ContentHandler and apply it to the XML-Reader*/ 
     Handler myExampleHandler = new Handler(); 
     xr.setContentHandler(myExampleHandler); 

     /* Parse the xml-data from our URL. */ 
     xr.parse(new InputSource(url.openStream())); 
     /* Parsing has finished. */ 

     /* Our ExampleHandler now provides the parsed data to us. */ 
     detaset parsedExampleDataSet = myExampleHandler.getParsedData(); 

     /* Set the result to be displayed in our GUI. */ 
     System.out.println(parsedExampleDataSet.toString()); 

     // Date = myExampleHandler.getParsedData(); 


     //System.out.println(Date); 
     this.setContentView(tv); 


     }catch (Exception e) { 
     e.printStackTrace(); 
    } 
     } 
    // TODO: handle exception 

/* Display the TextView. */ 


    } 

package com.xmlparser; 

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


public class Handler extends DefaultHandler{ 

     // =========================================================== 
     // Fields 
     // =========================================================== 

     private boolean NewDataSet = false; 
     private boolean Table = false; 
     private boolean Date = false; 
     private boolean Score = false; 

     private detaset myParsedExampleDataSet = new detaset(); 

     // =========================================================== 
     // Getter & Setter 
     // =========================================================== 

     public detaset getParsedData() { 
       return this.myParsedExampleDataSet; 
     } 

     // =========================================================== 
     // Methods 
     // =========================================================== 
     @Override 
     public void startDocument() throws SAXException { 
       this.myParsedExampleDataSet = new detaset(); 
     } 

     @Override 
     public void endDocument() throws SAXException { 
       // Nothing to do 
     } 

     /** Gets be called on opening tags like: 
     * <tag> 
     * Can provide attribute(s), when xml was like: 
     * <tag attribute="attributeValue">*/ 
     @Override 
     public void startElement(String namespaceURI, String localName, 
         String qName, Attributes atts) throws SAXException { 
       if (localName.equals("NewDataSet")) { 
         this.NewDataSet = true; 
       }else if (localName.equals("Table")) { 
         this.Table = true; 
       }else if (localName.equals("Date")) { 
         this.Date = true; 
       }else if (localName.equals("Score")) { 
         // Extract an Attribute 
         this.Score = true; 
             } 
     } 

     /** Gets be called on closing tags like: 
     * </tag> */ 
     @Override 
     public void endElement(String namespaceURI, String localName, String qName) 
         throws SAXException { 
       if (localName.equals("NewDataSet")) { 
         this.NewDataSet = false; 
         System.out.println("Newdataset"+NewDataSet); 
       }else if (localName.equals("Table")) { 
         this.Table = false; 
         System.out.println("Table"+Table); 
       }else if (localName.equals("Date")) { 
         this.Date = false; 
       }else if (localName.equals("Score")) { 
         // Nothing to do here 
        this.Score = false; 
        System.out.println("Score"+Score); 
       } 
     } 

     /** Gets be called on the following structure: 
     * <tag>characters</tag> */ 
     @Override 
    public void characters(char ch[], int start, int length) { 
       if(this.Date){ 
       myParsedExampleDataSet.setDate(new String(ch, start, length)); 
       } 
       if(this.Score){ 
        myParsedExampleDataSet.setScore(new String(ch, start, length)); 
        } 

     } 





    } 

package com.xmlparser; 
public class detaset { 
    private String Date = null; 
    private String Score = null; 




    public void setDate(String Date) { 
      this.Date = Date; 
     } 
     public String getDate() 
     { 
      return Date; 
     } 


     public void setScore(String Score) { 
      this.Score = Score; 
     } 
     public String getScore() 
     { 
      return Score; 
     } 








} 




<?xml version="1.0" encoding="utf-8" ?> 
- <DataSet xmlns="http://tempuri.org/"> 
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
- <xs:complexType> 
- <xs:choice minOccurs="0" maxOccurs="unbounded"> 
- <xs:element name="Table"> 
- <xs:complexType> 
- <xs:sequence> 
    <xs:element name="Date" type="xs:string" minOccurs="0" /> 
    <xs:element name="Score" type="xs:string" minOccurs="0" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    </xs:choice> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
- <NewDataSet xmlns=""> 
- <Table diffgr:id="Table1" msdata:rowOrder="0"> 
    <Date>12/5/2011</Date> 
    <Score>5</Score> 
    </Table> 
- <Table diffgr:id="Table2" msdata:rowOrder="1"> 
    <Date>45/5/2011</Date> 
    <Score>54</Score> 
    </Table> 
    </NewDataSet> 
    </diffgr:diffgram> 
    </DataSet> 
+0

那么,这个“问题”有什么意义? – Stephan 2011-05-25 12:24:34

+0

问题或问题是什么? – Hasandroid 2011-05-25 12:24:55

+0

这不是问题。代码太多,甚至没有提示问题是什么。 – 2011-05-25 12:44:40

回答

1

我认为错误是在该行URL url = new URL("C://Users//nik//Desktop//a.xml");

您将运行程序在模拟器或设备中在设备或仿真器中都没有这种路径。您可以将xml文件放在资产中并从那里读取文件。

如果我的回复对你有帮助,请不要忘记投票。

谢谢

+0

ya我只是给你xml文件,并在你判断这个应用程序 – 2011-05-25 12:43:16