Android XML Parsing:解析这种特殊的XML类型我对此没有任何想法

时间:2014-10-22 16:20:00

标签: java php android xml xml-parsing

这是XML URL

http://www.eboundservices.com/distribution/vod_new.xml

我们如何解析Android

<Aajkamrankhankaysath p0201="" p0801="" p0901="" p1501="" p1601="" p2201="" p2301="" p2901="" p3001="" p0702="" p2102="" p0303="" p0403="" p0603="" p1003="" p1103="" p1203="" p1303="" p1703="" p1803="" p1903="" p2003="" p2403="" p2503="" p2603="" p2703="" p2803="" p3103="" p0104="" p0204="" p0304="" p0404="" p0704="" p0804="" p0904="" p1004="" p1104="" p1404="" p1504="" p1604="" p1704="" p1804="" p2104="" p2204="" p2304="" p2404="" p2804="" p2904="" p3004="" p0105="" p0205="" p0505="" p0605="" p0705="" p0805="" p0905="" p1205="" p1305="" p1405="" p1505="" p1605="" p1905="" p2005="" p2105="" p2205="" p2305="" p2705="" p2805="" p2905="" p3005="" p0206="" p0306="" p0406="" p0506="" p2306="" p2406="" p2506="">25</Aajkamrankhankaysath>

我想得到:p0201,p0801,p0901,p1501,p1501 ......等等

我想保存在ArrayList中,意味着A TAG&lt;&gt; AaaryList中的数据分别为

3 个答案:

答案 0 :(得分:0)

首先,正如某人已经提到的那样,这些属性。拥有如此糟糕的XML是一个坏主意,即使网络服务很大,我也可以看到它的开发方式非常糟糕。除个人意见外,您还需要创建自己的类才能填充对象列表。您将需要读取每个节点,并手动填充每个属性,并且没有捷径可行(据我所知)。

public class TVNode {
    String p0210;
    String p0801;
    String p0901;

    // so on an so forth, define String mmembers for every attribute
    public TVNode()
    {

    }

    public void setp0210(String _p0210)
    {
    }
    public void setp0801(String _p0801)
    {
    }
    public void setp0901(String _p0901)
    {
    }
    // and getters too of course    
}

您将拥有一个TVNode类型列表,您可以从文件或网络响应中读取XML,一旦拥有它,您需要使用某种类型的XMLDOMParser解析它。我希望这会有所帮助。

答案 1 :(得分:0)

xmlpullparser比加载文档更快。它非常适合您在问题中的xml示例。

        XmlPullParser xpp;
        XmlPullParserFactory factory = null;

        factory = XmlPullParserFactory.newInstance();
        xpp = factory.newPullParser();
        xpp.setInput(kmlis, "UTF-8");  //todo get your input into inputstream


        int eventType = xpp.getEventType();
        while (true) {
            if (eventType == XmlPullParser.START_TAG) {
                if (xpp.getName().equals("aajdsaklhandsksplsb")){
                 int x = xpp.getAttributeCount();
                  for (int i = 0;i<x;i++){
                      String name = xpp.getAttributeName(i);
                      String value = xpp.getAttributeValue(i)
                       log.d("test", name + "=" + value);
                  }

                 }
            }
             else if (eventType == XmlPullParser.END_DOCUMENT) {break;}

         eventType = xpp.getEventType();
         }

答案 2 :(得分:0)

那必须是格式最差的XML,还有其他解析器,如 XMLPullParser,DOMParser和SAXParser ,但您可以使用 xmlPullParser 根据您的要求获取属性值。

以下是示例xml:

<message id="abc@web.hightech.com" from="web.hightect.com" text="Hello World">
<firstname>Marie Josèphe</firstname>
<lastname>Joseph</lastname>
</message>

这是一个完整的Parser,您可以使用此通用解析器来满足您的要求 示例:您可以从第一个属性

获取ID和文本
    public class New_Generic_Parser {
    public static ArrayList<String> list = new ArrayList<String>();
    XmlPullParserFactory xmlFactoryObject = null;
    String payload,option_text1,option_text2;

    public New_Generic_Parser() {
    payload = "";
    list = new ArrayList<String>();
    option_text1 = "";
    option_text2 = "";
    }

    private void parseXMLAndStoreIt(XmlPullParser myParser) {
    int event;
    try {
    event = myParser.getEventType();
    while (event != XmlPullParser.END_DOCUMENT) {
    String name=myParser.getName();
    switch (event){
    case XmlPullParser.START_TAG:
    if(name.equalsIgnoreCase("user")){
    option_text1 = myParser.getAttributeValue(null, "id");
    option_text2 = myParser.getAttributeValue(null,"text");
    //get attribute from here:
    }
     break;
    case XmlPullParser.TEXT:
        if(name.equalsIgnoreCase("user")){
            list.add(myParser.getText());
        }
   break;
   case XmlPullParser.END_TAG:
      String pic = list.get(0).toString();
      byte [] encodeByte=Base64.decode(pic,Base64.DEFAULT);
      Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
   break;
   }         
   event = myParser.next(); 
 }
//    parsingComplete = false;
} catch (Exception e) {
    e.printStackTrace();
 }
    }
    public void genericparser(String payload){
    try {
         InputStream stream = new ByteArrayInputStream(payload.getBytes());
         xmlFactoryObject = XmlPullParserFactory.newInstance();
         XmlPullParser myparser = xmlFactoryObject.newPullParser();
         myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
         myparser.setInput(stream, null);
         parseXMLAndStoreIt(myparser);
         stream.close();
      } catch (Exception e) {
        // TODO: handle exception
    }
   }