0

私は、Android アプリケーションの魔女が Web サービスから情報を取得するようにしています。この結果を解析するためのソリューションが必要です:

<Client xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://lmggroup.net/">
<ID>12805</ID>
<PersonalNumber>0</PersonalNumber>
<EntryDate>2013-01-28T14:39:01</EntryDate>
<FirstName>0</FirstName>
<LastName>0</LastName>
<Address>0</Address>
<Phone>0601231569</Phone>
<Email>aaa@aaa.com</Email>
<OrganizationalUnitID>02901</OrganizationalUnitID>
<Password>aaaaaa</Password>
<IsActive>true</IsActive>
</Client>

次のコードを使用して、この問題を解決するためにこれを試しました

public static ArrayList<UserContent> getUserContentList(String response)
{
    ArrayList<UserContent> result = new ArrayList<UserContent>();
    if (response != null && response.equals("") == false)
    {
        KXmlParser xmlParser = new KXmlParser();
        Document xmlDoc = new Document();

        ByteArrayInputStream bin = new ByteArrayInputStream(response.getBytes());
        InputStreamReader isr = new InputStreamReader( bin );

        try
        {
            xmlParser.setInput(isr);
            xmlDoc.parse(xmlParser);
            Element xmlRoot = xmlDoc.getRootElement();
            if(xmlRoot != null)
            {
                Element[] xmlChild = XmlParser.getChildren(xmlRoot);
                for ( int index = 0; index < xmlChild.length; ++index )
                {
                    UserContent item = new UserContent();
                    Element[] contentNodes = XmlParser.getChildren(xmlChild[index]);
                    for ( int i = 0; i < contentNodes.length; ++i )
                    {
                        if (contentNodes[i].getName().equals(StaticStrings.contentUserID))
                        {
                            item.id = contentNodes[i].getText(0);
                        }
                        else if (contentNodes[i].getName().equals(StaticStrings.contentUserPIB))
                        {
                            item.pib = contentNodes[i].getText(0);
                        }
                        else if (contentNodes[i].getName().equals(StaticStrings.contentUserPhone))
                        {
                            item.phone = contentNodes[i].getText(0);
                        }
                        else if (contentNodes[i].getName().equals(StaticStrings.contentUserMail))
                        {
                            item.email = contentNodes[i].getText(0);
                        }
                    }
                    result.add(item);
                }
            }
        }
        catch (IOException e)
        {
            Log.e(TAG, e.getMessage());
        }
        catch (XmlPullParserException e)
        {
            Log.e(TAG, e.getMessage());
        }

        try
        {
            isr.close();
        }
        catch (IOException e) {}

    }
    return result;
}

しかし、このメソッドを呼び出すと、すべての xml タグを取得しますが、その内容は null です。

4

1 に答える 1

0

より簡単な方法は、XML シリアライゼーション フレームワークを使用することです。純粋な Java を使用している場合は JAXB の可能性がありますが、Android の場合は単純な XMLが適しています。簡単に言うと、POJO を作成し、シリアル化/逆シリアル化する方法を示す注釈を付けます。例えば、

@Root(name = "Client")
class Client {

  @Attribute(name = "ID")
  private String id;

  ...
}

次に、デシリアライズします。

Serializer serializer = new Persister();
String xml = ...; // get your XML into a string, or a stream
Client client = serializer.read(Client.class, xml);
于 2013-02-01T00:09:40.473 に答える