2012-09-10 94 views
0

我想解析一个xml文件(来自资产),但是我无法正确理解它。用Android中的属性解析XML

通常当我做到这一点,我会格式化像下面的我的XML文件:

<channel> 
    <item> 
    <name>Hello Earth</name> 
    <place>Earth</place> 
    </item> 
    <item> 
    <name>Goodbye Mars</name> 
    <place>Mars</place> 
    </item/> 
</channel> 

而且我会用下面的代码分析出什么,我需要:

AssetManager assetManager = getAssets(); 
InputStream inputStream = assetManager.open("words.xml"); 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setCoalescing(true); 
DocumentBuilder builder = factory.newDocumentBuilder(); 

Document dom = builder.parse(inputStream);  

org.w3c.dom.Element root = dom.getDocumentElement(); 
NodeList items = root.getElementsByTagName("item");  

String name=""; 
String place=""; 

for (int i = 0; i < items.getLength(); i++) { 
Node item = items.item(i); 
NodeList properties = item.getChildNodes(); 

for (int j = 0; j < properties.getLength(); j++) { 
    Node property = properties.item(j); 
    String propertyName = property.getNodeName(); 

    if (propertyName.equalsIgnoreCase("name")) { 
     String strText = property.getFirstChild() 
     .getNodeValue(); 
     nam = strText; 
    } 

    if (propertyName.equalsIgnoreCase("place")) { 
     String strText = property.getFirstChild() 
     .getNodeValue(); 
     place = strText; 
    } 

    db.insertWord(name, place); 
} 

然而, xml来自另一个源,它的格式不同,它使用属性,因为它是一个mysql导出。这是我必须解析XML,但我无法弄清楚如何,我应该这样,我试着用的getAttribute玩弄()方法,但不能获取数据了XML的:

<table name="item"> 
    <column name="name">Hello Earth</column> 
    <column name="place">Earth</column> 
</table> 
<table name="item"> 
    <column name="name">Goodbye Mars</column> 
    <column name="place">Mars</column> 
</table> 

回答

1

你可以试试这个使用拉解析器遵循..

//定义类项目

class Item 
{ 
    String name; 
    String place; 
} 



ArrayList<Item>items=new ArrayList<Item>(); 




void somemethod() 
{ 

AssetManager assetManager = getAssets(); 
InputStream inputStream = assetManager.open("words.xml"); 

Item item=new Item(); 
try 
     { 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      XmlPullParser xpp = factory.newPullParser(); 
      xpp.setInput(inputStream,null); 
      int eventType = xpp.getEventType(); 
      while (eventType != XmlPullParser.END_DOCUMENT) 
      { 
       if(eventType == XmlPullParser.START_DOCUMENT) 
        { }     
       else if(eventType == XmlPullParser.START_TAG) 
       { 
        try 
        {       
          if(xpp.getName()!=null&& xpp.getName().equalsIgnoreCase("name")) 
           { 
            eventType = xpp.next(); 
            item.name=Integer.parseInt(xpp.getText().toString()); 
           } 
          else if(xpp.getName()!=null&& xpp.getName().equalsIgnoreCase("place")) 
           { 
            eventType = xpp.next(); 
            item.place=xpp.getText().toString(); 
           }      
         } 
        catch (Exception e) 
         { 
          //e.printStackTrace(); 
         } 
       } 
       else if(eventType == XmlPullParser.END_TAG) 
       { 
        if(xpp.getName()!=null&& xpp.getName().equalsIgnoreCase("content")) 
         { 
          eventType = xpp.next(); 
          items.put(item); 
          item=new Item(); 
         } 
       } 
       else if(eventType == XmlPullParser.TEXT) 
       {} 
       eventType = xpp.next();  
     }// end of while      

     } 
     catch (XmlPullParserException e) 
     { 
      //e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      //e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if(inputStream!=null) 
        inputStream.close(); 
      } catch (IOException e) 
      {    
      } 
     } 


    } 
+0

谢谢你,这真的帮助我 – brux

1

尝试这些.... ..

1.DOM PARSER

2.SAX PARSER

3.JAXB AND JAXP

4.CASTOR

5.Pull Parser