【问题标题】:How to parse xml using different parent nodes in android如何在android中使用不同的父节点解析xml
【发布时间】:2012-09-28 08:30:49
【问题描述】:

在我的 xml 文件中,我有两个或多个父节点,例如:-

//父节点披萨 //属性是 1 个蔬菜披萨
//父节点汉堡
//属性是1个Veg Burger,

每当用户点击披萨listview 项目时,用户应该能够仅查看另一个活动的listview 中的披萨项目列表。我知道如何调用下一个活动等,但我想知道如何在我的 java 类中使用不同的父节点,我需要在我的 java 类中做哪些更改,请参阅此链接,我正在使用本教程,但这里他们只使用一个父节点歌曲,但我想添加更多,我已经添加到我的 xml 文件中,但不知道我需要在 java 类中做哪些更改。

【问题讨论】:

  • 我建议您尝试以更易读的方式格式化您的问题。此外,如果您可以提供一个示例 xml 文件(最好是一个简单且只包含基础知识的文件,以便我们可以轻松理解您的问题),这将有所帮助。
  • 对于不同的专利节点,你只需按照这个例子:stackoverflow.com/questions/8782210/…
  • 我已更改请阅读并回复我...

标签: android android-layout android-intent android-emulator android-xml


【解决方案1】:
carrier.xml ile contains below xml contents
<?xml version="1.0" encoding="utf-8"?>
<carrier>
    <vehicle>
        <vehicle
            cid="1"
            cname="TAXI" />
        <vehivle
            cid="0"
            cname="AUTO" />
   </vehicle>

// In your code 
XmlPullParser xpp=null;
int eventType = 0;
XmlPullParserFactory factory =null;
BufferedReader bufr=null;   
StringBuilder total ="";
     try{           
    bufr = new BufferedReader(new FileReader("/carrier.xml"));
    total = new StringBuilder();
    String line=""; 
    while ((line = bufr.readLine()) != null)
    {     
    total.append(line);
    }                       
    factory = XmlPullParserFactory.newInstance();  
    factory.setNamespaceAware(true);   
    xpp = factory.newPullParser();   
    xpp.setInput(new StringReader(new String(total)));                  
    eventType = xpp.getEventType();             
    }catch(XmlPullParserException e){
    // Log.v("xmlpullparser"," "+e);
    e.printStackTrace();
    }catch(IOException ie){
    // Log.v("IOException"," "+ie);
    ie.printStackTrace();
    }


    try{
    while (eventType != XmlPullParser.END_DOCUMENT){                    
    if(eventType == XmlPullParser.START_TAG){ 
    String Scid="",Scname="";
    int acount=xpp.getAttributeCount();             
    if(acount!=-1){
    for(int x=0;x<acount;x++){                                              
                        if(xpp.getAttributeName(x).equalsIgnoreCase("cid")){
                            Scid=xpp.getAttributeValue(x);                                                                                  
                        }if(xpp.getAttributeName(x).equals("cname")){
                            Scname=xpp.getAttributeValue(x);
                        }
                    }               
    }   
    }       
    eventType = xpp.next();  
    }                               
    }catch(Exception e){        
            e.printStackTrace();
    }

After this you can use the Scid Scname etc in your code as per your convenience

【讨论】:

  • meher,像这里你只使用一个父节点,但我需要使用多个彼此不同的父节点,例如:车辆,运输(父节点)
  • 嗨,这里 xml pull 解析器将读取所有具有相同名称或不同名称的开始标签我已经指定了属性字符串名称,如 cid 和 cname 而不是开始标签字符串名称。如果添加日志并打印通过在字符串中读取起始标记名称,您将看到所有起始节点。希望我对你很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多