【问题标题】:Android parsing how to get value from this XMLAndroid解析如何从此XML中获取价值
【发布时间】:2012-09-08 08:10:23
【问题描述】:

这里只是一个简单的问题。我怎样才能得到这种xml的返回值

 Art C. Cauyao<$@FBID@$>501912568<$@ENDFBID@$>Tessa Rose 
Brainard<$@FBID@$>510831686<$@ENDFBID@$>
Dan Gangan<$@FBID@$>513545777<$@ENDFBID@$>
C Jhec DawAko<$@FBID@$>523059320<$@ENDFBID@$>Jeremy 

请查看我正在获取 Facebook 名称和 Facebook ID 有什么办法吗?

编辑

我发现它不是一个 xml 而是一个 JSON(对不起)现在我的问题是如何合并该返回值?

第二次编辑 先生,这是我在做什么 通过这个解析它

static final String URL_FBFRIEND ="Some URL"+ "getFBFriends.php"; 

现在使用它,我现在可以使用我的输入值解析一些数据。这是代码

        XMLparser parser2 = new XMLparser(); 
    parser2.getXmlFromUrl(URL_FBFRIEND); 

      //HTTP POST
      String url_Getmembermob= URL_FBFRIEND ;
      String xml_getMembermob=null;
      try {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost(url_Getmembermob);

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); 
      nameValuePairs.add(new BasicNameValuePair("...", "...."));
      nameValuePairs.add(new BasicNameValuePair("fbID", modGen.facebookID ));
      nameValuePairs.add(new BasicNameValuePair("accToken", modGen.tokenID));
      nameValuePairs.add(new BasicNameValuePair("reqType", "0"));

      Log.i("nameValuePairs", "nameValuePairs=" + nameValuePairs);

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse httpResponse = httpclient.execute(httppost);

        HttpEntity httpEntity = httpResponse.getEntity();

        xml_getMembermob = EntityUtils.toString(httpEntity);

        Log.i("xml-return",""+ xml_getMembermob);

    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace(); 
    }catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

看到我正在记录返回的 xml Log.i("xml-return",""+ xml_getMembermob); 这就是输出

先生,我修改了您的代码` 公共静态列表 parseUserList(String userData) { 列表 ret = new ArrayList();

    int index = 0;
    while (index < userData.length())
    {
        int startFbTag = userData.indexOf(FB_NAME, index);
        if (index == -1)
        {

            return ret;
        }
        String name = userData.substring(index, startFbTag - index);
        startFbTag += FB_NAME.length(); // Start of the actual data
        int endFbTag = userData.indexOf(FB_ID, startFbTag);
        if (endFbTag == -1)
        {
            throw new IllegalArgumentException("Unterminated start tag");
        }

        fbTagValue = userData.substring(startFbTag, endFbTag - startFbTag);
        Log.i("UserName",fbTagValue);
        //fbId = Long.parseLong(fbTagValue);
        //ret.add(new User(name, fbId));
        index = endFbTag + FB_ID.length();
    }
    return ret;
}

我在这里遇到错误 ** fbTagValue = userData.substring(startFbTag, endFbTag - startFbTag);** 似乎是什么问题

【问题讨论】:

  • 我不确定这是否是有效的 XML - $@FBID@$ 是 XML 中的有效元素名称吗?请注意,如果这是完整的文件格式,那么它肯定是not 有效的 XML。请向我们提供更多信息。
  • @JonSkeet 这就是我的 xml 解析器返回的内容
  • “返回我的 xml 解析器”是什么意思?你没有给我们足够的背景。我强烈怀疑这根本不是一个真正的 XML 文件——它只是一个非常类似于 XML 的文件。
  • @JonSkeet 我打电话给我的朋友,发现 php 只是返回 JSON,我的任务是在 Listview 上动态添加它
  • 这也不是 JSON。基本上它看起来像一些可怕的自定义格式,使用起来会很不舒服。所以你目前在一个字符串中拥有所有数据?

标签: java android xml json


【解决方案1】:

这是非常可怕的格式。它不是 XML。这不是 JSON。假设你已经有了某种User 类,并且所有数据都在一个String 中,你可以写这样的东西(完全未经测试):

private static final String FB_START = "<$@FBID@$>";
private static final String FB_END = "<$@ENDFBID@$>";

public static List<User> parseUserList(String userData)
{
    List<User> ret = new ArrayList<User>();

    int index = 0;
    while (index < userData.length())
    {
        int startFbTag = userData.indexOf(FB_START, index);
        if (index == -1)
        {
            // No tags left. You should check whether you've actually got
            // some data left, and potentially throw an exception. It's not
            // clear what your data format does here.
            return ret;
        }
        String name = userData.substring(index, startFbTag - index);
        startFbTag += FB_START.length(); // Start of the actual data
        int endFbTag = userData.indexOf(FB_END, startFbTag);
        if (endFbTag == -1)
        {
            throw new IllegalArgumentException("Unterminated start tag");
        }

        String fbTagValue = userData.substring(startFbTag, endFbTag - startFbTag);
        long fbId = Long.parseLong(fbTagValue);
        ret.add(new User(name, fbId));
        index = endFbTag + FB_END.length();
    }
    return ret;
}

【讨论】:

  • 先生,一个问题。你说的用户类,我应该创建一个新类还是我的活动
  • @Androyd:这是一个新课程。用户的表示与活动非常不同,不是吗?
  • ims 先生仍在尝试找出获取此数据的方法。我什至试图只拆分字符串,但到目前为止没有任何效果 T_T
  • @Androyd:我给出的代码为你做的。一旦你获得了User 类,你应该就可以使用我给你的代码了。
猜你喜欢
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2012-12-13
相关资源
最近更新 更多