2012-08-28 128 views
0

我按照这个例子来解析xml example,但是当我尝试解析xml时,出现错误。 该Xml是Reg Variacion =“20”/>用标签解析xml

我需要显示TextView []; 20,20,20

这是我的代码:

MainActivity.java

public class MainActivity extends Activity { 

    SitesList sitesList = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     /** Create a new layout to display the view */ 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(1); 


     /** Create a new textview array to display the results */ 

     TextView registro[]; 
     TextView variacion[]; 

     try { 

      /** Handling XML */ 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      /** Send URL to parse XML Tags */ 
      URL sourceUrl = new URL("http://www.bovalpo.com/cgi-local/xml_bcv.pl?URL=75"); 


      /** Create handler to handle XML Tags (extends DefaultHandler) */ 
      MyXMLHandler myXMLHandler = new MyXMLHandler(); 
      xr.setContentHandler(myXMLHandler); 
      xr.parse(new InputSource(sourceUrl.openStream())); 


      } catch (Exception e) { 
       System.out.println("XML Pasing Excpetion = " + e); 
      } 


     /** Get result from MyXMLHandler SitlesList Object */ 
     sitesList = MyXMLHandler.sitesList; 


     /** Assign textview array lenght by arraylist size */ 
     registro = new TextView[sitesList.getRegistro().size()]; 
     variacion = new TextView[sitesList.getVariacion().size()]; 


     /** Set the result text in textview and add it to layout */ 
     for (int i = 0; i < sitesList.getRegistro().size(); i++) { 

      registro[i] = new TextView(this); 
      registro[i].setText(sitesList.getRegistro().get(i)); 
      variacion[i] = new TextView(this); 
      variacion[i].setText(sitesList.getVariacion().get(i)); 


      layout.addView(registro[i]); 
      //layout.addView(category[i]); 
     } 

     /** Set the layout view to display */ 
     setContentView(layout); 
    } 
} 

MyXMLHandler.java

DefaultHandler { 
    @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

    currentElement = true; 
    if (localName.equals("root")) 
    { 
     /** Start */ 
     sitesList = new SitesList(); 

    } else if (localName.equals("registro")) { 

     String attr = attributes.getValue("Variacion"); 
     String var = String.valueOf(attr); 
     sitesList.setVariacion(var); 
    } 

    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 

    currentElement = false; 

    /** set value */ 
     if (localName.equalsIgnoreCase("registro")) 
      sitesList.setRegistro(currentValue); 

    } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 

     if (currentElement) { 
      currentValue = new String(ch, start, length); 
      currentElement = false; 
     } 

    } 
} 
+0

*“当我试图解析XML,我得到错误” *是相当模糊的,你能更具体? LogCat中的堆栈跟踪是什么意思?对于初学者,我可以告诉你'localName.equals(“registro”)'永远不会是真的,因为返回的xml显示'Registro'(大写'R')。 –

+0

当你做某件事情并得到一个错误时,告诉我们错误是什么。你可能不了解错误信息,但我们有很好的机会。 –

+0

我解决了这个问题,解析错误 –

回答

0

尝试使用DOM解析器(文档对象模型)

请参阅此链接:

http://tutorials.jenkov.com/java-xml/dom.html

+0

我试过使用DOM PARSER,但我被问到解析器用这种方法做,因为它更容易添加颜色 –

+0

然后尝试推解析世界上最好的 –