Android 如何解析Xml数据。。。?

Android 如何解析Xml数据。。。?,android,xml,parsing,Android,Xml,Parsing,我是android原生编码新手,我的Web服务有xml响应,我很困惑。如何解析xml数据并将数据插入字符串数组。。我收到来自服务器的以下响应 <?xml version="1.0" encoding="UTF-8"?> <soap:Body> <GetActiveThemeListResponse xmlns="http://tempuri.org/"> <GetActiveThemeListResult> <

我是android原生编码新手,我的Web服务有xml响应,我很困惑。如何解析xml数据并将数据插入字符串数组。。我收到来自服务器的以下响应

<?xml version="1.0" encoding="UTF-8"?>
 <soap:Body>
  <GetActiveThemeListResponse xmlns="http://tempuri.org/">
     <GetActiveThemeListResult>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
           <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
              <xs:complexType>
                 <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="ActiveThemeList">
                       <xs:complexType>
                          <xs:sequence>
                             <xs:element name="ThemeName" type="xs:string" minOccurs="0" />
                          </xs:sequence>
                       </xs:complexType>
                    </xs:element>
                 </xs:choice>
              </xs:complexType>
           </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
           <NewDataSet xmlns="">
              <ActiveThemeList diffgr:id="ActiveThemeList1" msdata:rowOrder="0">
                 <ThemeName>sample</ThemeName>
              </ActiveThemeList>
              <ActiveThemeList diffgr:id="ActiveThemeList2" msdata:rowOrder="1">
                 <ThemeName>magic</ThemeName>
              </ActiveThemeList>
              <ActiveThemeList diffgr:id="ActiveThemeList3" msdata:rowOrder="2">
                 <ThemeName>travel</ThemeName>
              </ActiveThemeList>
           </NewDataSet>
        </diffgr:diffgram>
     </GetActiveThemeListResult>
  </GetActiveThemeListResponse>
 </soap:Body>
</soap:Envelope>

样品
魔术
长途行走
如何获取第二个子节点的数据
NewDataSet
我需要将
ThemeName
节点值
sample
插入数组[]; 我需要按如下方式存储数据:

Ex:[样本、魔术、旅行]

任何人的帮助都将不胜感激……

您可以使用Jsoup

(从下载--只需将jar添加到您的项目中。如果您有任何问题,请告诉我)

要使用它,您可以写:

 List<String> themes = new ArrayList<String>();

 // Parse the XML to create a DOM
 Document doc = Jsoup.parse(yourXmlAsAString);

 // Use the select method to select all ThemeName tags
 for (Element elem: doc.select("ThemeName")){

     // Use the text method to get the inner text
     themes.add(elem.text());
 }


另一个选项是使用XmlPullParser。与SAX和DOM相比,它的优点是API相对简单,速度快,所需内存比DOM API少。请阅读 举例说明如何使用它

import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException.html;
import org.xmlpull.v1.XmlPullParserFactory;

 public class SimpleXmlPullApp
 {

     public static void main (String args[])
         throws XmlPullParserException, IOException
     {
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();

         xpp.setInput(new StringReader ("<foo>Hello World!</foo>"));
         int eventType = xpp.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_DOCUMENT) {
              System.out.println("Start document");
          } else if(eventType == XmlPullParser.END_DOCUMENT) {
              System.out.println("End document");
          } else if(eventType == XmlPullParser.START_TAG) {
              System.out.println("Start tag "+xpp.getName());
          } else if(eventType == XmlPullParser.END_TAG) {
              System.out.println("End tag "+xpp.getName());
          } else if(eventType == XmlPullParser.TEXT) {
              System.out.println("Text "+xpp.getText());
          }
          eventType = xpp.next();
         }
     }
 } 
import java.io.IOException;
导入java.io.StringReader;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException.html;
导入org.xmlpull.v1.XmlPullParserFactory;
公共类SimpleXmlPullApp
{
公共静态void main(字符串参数[])
引发XmlPullParserException,IOException
{
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp=factory.newPullParser();
setInput(新的StringReader(“HelloWorld!”);
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START\u文档){
System.out.println(“开始文档”);
}else if(eventType==XmlPullParser.END_文档){
系统输出打印项次(“结束文件”);
}else if(eventType==XmlPullParser.START_标记){
System.out.println(“开始标记”+xpp.getName());
}else if(eventType==XmlPullParser.END_标记){
System.out.println(“结束标记”+xpp.getName());
}else if(eventType==XmlPullParser.TEXT){
System.out.println(“Text”+xpp.getText());
}
eventType=xpp.next();
}
}
} 
for (Element elem: doc.select("NewDataSet > ThemeName")){
import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException.html;
import org.xmlpull.v1.XmlPullParserFactory;

 public class SimpleXmlPullApp
 {

     public static void main (String args[])
         throws XmlPullParserException, IOException
     {
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();

         xpp.setInput(new StringReader ("<foo>Hello World!</foo>"));
         int eventType = xpp.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_DOCUMENT) {
              System.out.println("Start document");
          } else if(eventType == XmlPullParser.END_DOCUMENT) {
              System.out.println("End document");
          } else if(eventType == XmlPullParser.START_TAG) {
              System.out.println("Start tag "+xpp.getName());
          } else if(eventType == XmlPullParser.END_TAG) {
              System.out.println("End tag "+xpp.getName());
          } else if(eventType == XmlPullParser.TEXT) {
              System.out.println("Text "+xpp.getText());
          }
          eventType = xpp.next();
         }
     }
 }