从android中的xml获取数据

时间:2014-07-27 12:30:40

标签: android xml

我正在开发Android应用程序。在我的应用程序中,我从服务器获取了xml数据响应,并将其存储在一个字符串中。现在我需要获取该xml的每个值并显示在下拉列表中。我怎样才能做到这一点。请帮我解决一下这个。真的很感激。

我的xml数据:

<?xml version="1.0" encoding="utf-8"?>

<root>
<status>first<status>
<description>very good</description>
<Firstnames>
<name>CoderzHeaven</name>
<name>Android</name>
<name>iphone</name>
</Firstnames>
<SecondNames>
 <name>Google</name>
 <name>Android</name>
</SecondNames>
</root>

我从服务器获取上述xml数据。现在我需要在listview中显示它。如何使用xmlparser获取这些值。我尝试了不同的例子,但它对我没用。

2 个答案:

答案 0 :(得分:0)

您需要创建一个额外的类并使用此类的对象参数化您的适配器,示例数据模型如下所示:

  public class DataClass {

private String status, description;
private ArrayList<String> fnames, lnames;

public DataClass() {
    fnames = new ArrayList<String>();
    lnames = new ArrayList<String>();
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

    public ArrayList<String> getFnames() {
    return fnames;
}

public ArrayList<String> getLnames() {
    return lnames;
}
}

对于XML解析器,有大量的例子,如果你可以使用搜索,你肯定会有优势。只是为了给你一个启发点,教程onetwothreefour

如果您遇到问题,请发布您的努力和不起作用的代码,您尝试过的内容等等。然后你会得到帮助,否则SO上的任何人都不会为你编写代码。 https://stackoverflow.com/help/how-to-ask

答案 1 :(得分:0)

如果xml位于您的应用资产文件夹中,您可以执行以下操作。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    InputStream input = null;
    try {
        input = getApplicationContext().getAssets().open("data.xml");
    } catch (IOException e) {
        e.printStackTrace();
    }
    DocumentBuilder builder = null;
    try {
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }
    Document doc = null;
    if (builder == null) {
        Log.e("TAG", "Builder is empty.");
        return;
    }
    try {
        doc = builder.parse(input);
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (doc == null) {
        Log.e("TAG", "Document is empty.");
        return;
    }

    // Get Firstnames element
    Element firstNames = (Element) doc.getElementsByTagName("Firstnames").item(0);
    // Get name nodes from Firstnames
    NodeList nameNodes = firstNames.getElementsByTagName("name");
    // Get count of names inside of Firstnames
    int cChildren = nameNodes.getLength();
    List<String> names = new ArrayList<String>(cChildren);
    for (int i=0; i<cChildren; i++) {
        names.add(nameNodes.item(i).getTextContent());
        Log.d("TAG","Name: "+names.get(i));
    }

    // Do same with SecondNames
}