0

我正在尝试解析一个 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>
4

3 回答 3

1

试试这些......

1. DOM PARSER

2. SAX PARSER

3. JAXB AND JAXP

4. CASTOR

5. Pull Parser

于 2012-09-10T16:31:29.840 回答
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) 
            {               
            }
        }


    }
于 2012-09-10T17:08:45.010 回答
1

看看这个问题的答案。有一个如何处理属性的示例:

如何在 android 中使用 xmlpullparser 从嵌套的 xml 中提取文本?

于 2012-09-10T17:44:28.807 回答