从 PHP 脚本获取和解释 XML 文件响应的最简单方法是啥? [复制]

Posted

技术标签:

【中文标题】从 PHP 脚本获取和解释 XML 文件响应的最简单方法是啥? [复制]【英文标题】:Which is the easiest approach to get & interpret a XML file response from a PHP script? [duplicate]从 PHP 脚本获取和解释 XML 文件响应的最简单方法是什么? [复制] 【发布时间】:2012-03-31 18:38:13 【问题描述】:

可能重复:Best XML Parser for phpUsing JAXB with Google android

我需要在我的 Android 应用中添加一个简单的功能。

我必须连接到这个虚构的脚本:http://test/getMagazinesList.php

脚本会返回一个像这样的 XML 文件:

<magazines>
 <magazine title="APP 1" id="1">
  <description>Prueba real</description>
   <miniature>http://web/miniature.jpg</miniature>
 </magazine>
 <magazine title="APP 2" id="2">
  <description>Prueba real 2</description>
   <miniature>http://web/miniature2.jpg</miniature>
 </magazine>
 <magazine title="APP 3" id="3">
  <description>Prueba real 3</description>
   <miniature>http://web/miniature3.jpg</miniature>
 </magazine>
</magazines>

目标是将 XML 的所有信息存储在这些 MagazinePreview 对象的列表中:

public class MagazinePreview 
String title;
String id;
String description;
String miniatureUrl;
Bitmap miniature;
public MagazinePreview(String title, String id, String description,
        String miniatureUrl) 
    super();
    this.title = title;
    this.id = id;
    this.description = description;
    this.miniatureUrl = miniatureUrl;
       

连接到该 PHP 并获取 XML 并解释它以将信息存储在 MagazinePreview 类对象列表中的最简单方法是什么?

谢谢

【问题讨论】:

以及右侧相关部分中更多合适的副本。提问前请使用搜索功能。 Do your homework. 你也可以参考这里。 ***.com/questions/4624440/… @Pableras84 “最简单的方法”没有建设性。据我所知,OP 只是询问如何处理 XML,我们得到了任何语言的答案。 这里没有提及 PHP 【参考方案1】:

您可以为此使用Simple XML。

用这些注释装饰你的MagazinePreview 类:

public class MagazinePreview 

  @Attribute
  String title;
  @Attribute
  String id;
  @Element
  String description;
  @Element(name="miniatura")
  String miniatureUrl;
  Bitmap miniature;
  public MagazinePreview(String title, String id, 
                         String description, String miniatureUrl) 
  
    super();
    ...
     

现在为您的杂志收藏添加一个类。添加一个执行 XML 字符串反序列化的方法,在执行过程中实例化您的对象:

@Root
public class MagazinePreviews

  @ElementList(name="magazines")
  ArrayList<MagazinePreviews> previews;

  public static MagazinePreviews Load(String xml)
  
    Serializer serializer = new Persister();
    return serializer.read(MagazinePreviews.class, xml);
  

这将为您提供一个 MagazinePreviews 实例,其中包含您的 MagazinePreview 实例。简单的 XML 完成了所有繁重的工作。它将使用注解(@Element@Attribute)来知道哪些数据应该放在哪些字段中。

您仍然需要一种方法来连接到您的 PHP 服务器脚本。假设它是一个简单地返回 XML 字符串的脚本,你可以使用这个:

public String getXML() throws Exception

  StringBuilder builder = new StringBuilder();
  HttpClient httpclient = new DefaultHttpClient();
  HttpGet httpget = new HttpGet("myscript.php");
  HttpResponse response = httpclient.execute(httpget);
  int statuscode = response.getStatusLine().getStatusCode();
  if(statuscode == 200)
  
    HttpEntity entity = response.getEntity();
    InputStream content = entity.getContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
    String line;
    while ((line = reader.readLine()) != null)  builder.append(line);               
  
  else throw new Exception("HTTP error: " + String.valueOf(statuscode));
  return builder.toString();

此代码在服务器上调用您的 PHP 脚本,检索响应(假定为 XML 字符串),或在请求失败时抛出错误。

【讨论】:

我可以在没有任何限制的商业应用上使用 SimpleXML 吗? 为什么在字符串 minituraUrl 之前使用 "@Element(name="miniatura")"; ??还有,为什么title & id 是属性,而description 是元素? 您可以不受任何限制地使用 SimpleXML。您必须对 XML 属性使用 @Attribute 注释,对 XML 元素使用 @Element 注释。我将@Element(name="miniatura") 用于“String mini-Url”,因为字段名称与 XML 中使用的名称不同。 谢谢,我现在明白了。现在的问题是如何将我用你最后一种方法获得的字符串 xml 转换为对象杂志预览。我怎样才能实现最后一件事? 当然是调用MagazinePreviews.Load(String xml) 方法。

以上是关于从 PHP 脚本获取和解释 XML 文件响应的最简单方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC4 + Spring + MyBatis3 基于注解的最简配置

如何使用 PHP 从 Web 服务获取 XML 数据?

Flink学习笔记:Flink的最简安装

使用命名空间从 XML 响应中获取 PHP 数组

如何使用 PHP 将 Simple XML 解释为 HTML?

从 php 脚本获取响应