2

私の リモートサーバーには、xml形式のデータがあります

<reply>
<username>username</username>
<status>1<status>
<photo>http://diskonbanget.com/bni/images/user</photo>
<city><city_name>Bandung</city_name><city_code>1</city_code></city>
<jaminan>< jaminan_name>Rumah Tinggal</jaminan_name><jaminan_code>1</jaminan_code></ jaminan>
<dokumen><dokumen_name>SHM</dokumen_name><dokumen_code>1</dokumen_code></dokumen>
<property_list><property id=“1”&gt;
    <description>bla bla</description>      <image>http://www.diskonbanget.com/bni/images/jaminan</image><property_code>1</property_code></property>
</property_list>
</reply>

したがって、ユーザー名、City_code、Jaminan_code、および Dokumen_code をパラメーターとして渡す必要があり、Android アプリケーションから都市の詳細、jaminan の詳細、dokumen の詳細を読み取る必要があります。サンプルコードを教えてください。

4

2 に答える 2

3

これにより、URL から XML が取得されます。

public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // return XML
    return xml;
}

これは XML から要素を取得します。

 public Document getDomElement(String xml){
    Document doc = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {

        DocumentBuilder db = dbf.newDocumentBuilder();

        InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is);

        } catch (ParserConfigurationException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }
            // return DOM
        return doc;
}
public String getValue(Element item, String str) {
 NodeList n = item.getElementsByTagName(str);
 return this.getElementValue(n.item(0));
}

public final String getElementValue( Node elem ) {
     Node child;
     if( elem != null){
         if (elem.hasChildNodes()){
             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                 if( child.getNodeType() == Node.TEXT_NODE  ){
                     return child.getNodeValue();
                 }
             }
         }
     }
     return "";
} 

使用法:

// All static variables
static final String URL = "http://api.androidhive.info/pizza/?format=xml";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_NAME = "name";
static final String KEY_COST = "cost";
static final String KEY_DESC = "description";

XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element

NodeList nl = doc.getElementsByTagName(KEY_ITEM);

// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
    String name = parser.getValue(e, KEY_NAME); // name child value
    String cost = parser.getValue(e, KEY_COST); // cost child value
    String description = parser.getValue(e, KEY_DESC); // description child value
}
于 2012-10-04T20:29:26.097 に答える
0

また、文字セットに問題がある場合は、getXmlFromUrlメソッドで使用します

xml = EntityUtils.toString(httpEntity, "your charset");

キリル文字の xml データを扱うときに役立ちました。

于 2013-08-06T08:03:35.660 に答える