Android XML DOM 解析中如何解析同名标签?

2023-11-26

我无法在这里解析我的 XML。它仅返回“项目”。
My AndroidActivity由于太大而无法显示。这就是为什么我只展示了负责解析的部分。

我的 XML 看起来像这样:

<MyResource>
<Item>First</Item>
<Item>Second</Item>
</MyResource>

我的 ActivityClass 方法:

public class ShowItems extends Activity{
    ListView lv;
    ListAdapter adapter;
    static final String KEY_RESOURCE = "MyResource"; // parent node 
    static final String KEY_ITEM = "Item";
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
    String[] from={KEY_ITEM };
    int[] to={R.id.mylist_item};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showitems);
        
        lv=(ListView) findViewById(R.id.lv_items);
        parseXML();
        adapter = new SimpleAdapter(this, mylist,R.layout.list_item,from , to); 
        lv.setAdapter(adapter);
    }

private void parseXML() {
    // TODO Auto-generated method stub
    XMLParser parser = new XMLParser();
    
    final String URL="http://10.0.2.2:8080/MySite/xml";
    String xml = parser.getXmlFromUrl(URL); 
    Document doc = parser.getDomElement(xml); 
    NodeList nl = doc.getElementsByTagName(KEY_RESOURCE); 
    for (int i = 0; i < nl.getLength(); i++) {

        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i); 
        map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); 
        mylist.add(map); }
}

我的 XML 解析器类:

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import android.util.Log;
public class XMLParser {
    public String getXmlFromUrl(String url) { 
        String xml = null; 
        try { 
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            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; 
    }
    
    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 ""; 
      } 
}

我无法在这里解析我的 XML。这里有什么问题?
它仅返回“项目”。
我需要在我的ActivityClass尤其是这部分代码?

String xml = parser.getXmlFromUrl(URL); 
    Document doc = parser.getDomElement(xml); 
    NodeList nl = doc.getElementsByTagName(KEY_RESOURCE); 
    for (int i = 0; i < nl.getLength(); i++) {
        
        
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i); 
        map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); 
        mylist.add(map); }

Your getValue()方法得到MyResource元素,从那里,您需要获取下的所有项目MyResource and do getElementValue()。示例代码是:

   public Map getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        for (int i = 0; i < n.getLength(); i++) {
            System.out.println(getElementValue(n.item(i)));
        }
        //Here store it in list/map and return list/map instead of String
        return list/MapHere;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android XML DOM 解析中如何解析同名标签? 的相关文章

随机推荐

  • 当 Java 8 Stream 抛出 RuntimeException 时,预期的行为是什么?

    当遇到一个RuntimeException在流处理期间 流处理是否应该中止 应该先完成吗 是否应该重新抛出异常Stream close 异常是按原样重新抛出还是被包装 JavaDoc 的Stream和包装java util stream对此
  • 如何使用中文版 mPDF

    我正在使用 mPDF 将表单输入数据保存到 PDF 对于英语来说 它工作得很好 任何人都可以使用此代码将 HTML 表单数据保存为 PDF 问题 为了满足我的项目要求 我需要使用中文 我当前的代码不适用于此 表单 html
  • Android GridView 按钮单击处理程序

    我有一个安卓GridView与ImageView TextView和两个Button s 网格看起来很好 但我发现很难处理其中的按钮事件GridView 我是安卓新手 任何帮助 将不胜感激 Thanks 如果您希望按钮 以及其他任何内容 在
  • 如何克隆 Servlet 容器提供的分离的 HttpServletRequest 和 HttpServletResponse?

    我想实现以下逻辑 当我在主servlet的doService方法 在主web容器线程中 收到HttpServletRequeset和HttpServletResponse时 我启动A B C三个线程 由我自己的程序管理的线程 以并行模式处理
  • JQuery 文件上传在单独的 Post 请求中发送每个文件?

    我的问题既简单又复杂 我尝试使用 jQuery fileUpload 库和 spring mvc 控制器作为服务器端上传文件 但我的文件每个都由一个请求上传 我想要的是将它们全部发布在一个请求中 我努力了单文件上传 假选项 但它不起作用 如
  • 使用 Zend Action Helper ContextSwitch 创建自定义 JSON 响应对象

    我通常将编码的 json 对象附加到响应正文 但是现在我遇到了需要使用 ContextSwitch 操作助手的情况 我有一个 Zend Form 需要三个不同的响应上下文 html 将表单渲染为普通 html 在布局内 html 部分 渲染
  • .NET 中最简单的键/值对文件解析

    我的项目需要一个文件 我将在其中存储用户应该能够读取和修改的键 值对数据 我希望程序只期望键在那里 并且我想尽快从文件中解析它们 我可以将它们存储在 XML 中 但是 XML 太复杂了 它需要遍历节点和子节点等等 我想要的只是一些接受文件并
  • 在 ddply 中使用 ifelse 和转换

    我正在尝试使用ddply with transform填充一个新变量 summary Date 在带有变量的数据框中ID and Date 变量的值是根据正在评估的片段的长度来选择的ifelse 如果给定月份内某个 ID 的观测值少于 5
  • ScrollView 正在捕获谷歌地图的触摸事件

    我有一个水平滚动视图 其中包含视图组的层次结构 最后是谷歌地图 我的问题是 HSV 正在捕捉地图上的左右阻力 我试过了 hsv requestDisallowInterceptTouchEvent true 乃至 mapView getPa
  • 如何限制 ngFor 重复 Angular 中的某些项目?

    My Code li class dropdown item li
  • 在没有 UWP 的情况下从 C++/WinRT 使用 FileOpenPicker 时出现“无效窗口句柄”错误

    我正在尝试使用C WinRT写一些有趣的东西 由于我的 Windows 编程经验很少 也没有 C CX 经验 所以我开始尝试示例程序 OCR 示例程序是关于光学字符识别的 我将其修改为面部检测器 基于控制台 效果非常好 我想将获取文件从命令
  • 在没有互联网的情况下从 R 中的 Plotly 导出 PNG 文件

    在这个问题中 从 R 中的 Plotly 导出 PNG 文件我问如何将 Plotly 绘图导出到磁盘 我使用了该功能plotly IMAGE 但后来发现该函数使用了 Plotly 互联网服务器 问题是 现在 Plotly JavaScrip
  • Prolog 中的随机项

    我知道我能做到X is random 10 获取 0 到 10 之间的随机数 但是是否有类似的命令来获取随机匹配项 SWI Prolog v6 有random member 2定义如下 listing random member rando
  • 如何在不平滑任何内容的情况下放大 UIImage?

    我想以这样的方式放大 UIImage 以便用户可以非常清晰地看到 UIImage 中的像素 当我将其放入 UIImageView 并放大变换矩阵时 UIImage 会出现抗锯齿和平滑效果 有没有办法通过简单地重复每一行和每一列来获得更大的像
  • 为什么枚举需要显式转换为 int 类型?

    这样做不会丢失数据 那么为什么必须显式地将枚举转换为整数呢 如果它是隐式的 那么当您有更高级别的方法时 例如 PerformOperation OperationType Silent type where PerformOperation
  • HttpResponse 不包含 Dot Net Core 的 AddHeader 的定义

    将项目移至 Net Core 时 AddHeader抛出错误 错误 CS1061 HttpResponse 不包含定义 AddHeader 且没有扩展方法 AddHeader 接受第一个 可以找到 HttpResponse 类型的参数 您是
  • 哪些操作系统不会在程序退出时释放内存?

    这个问题让我很好奇 像这样的问题总是得到诸如 它通常是安全的 但你不应该假设操作系统会为你做这件事 这样的答案 这对我来说听起来是个好建议 但我想知道 是否有任何积极开发 发布 的不执行此操作的操作系统 这是恐龙时代 80年代 就被修复的东
  • 仅返回 mongo 投影中的数组值

    有没有办法只返回 mongodb 投影中属性的值 例如 我有一个文档 其中有一个属性 其值为数组 我希望查询的返回对象只是数组 而不是property 例子 文档 db test insert name Andrew attributes
  • 如何在Android中播放在线视频?

    我正在 Android 中开发一个示例媒体播放器应用程序来播放在线视频 我已经开发了一些代码来播放视频 它可以很好地播放 SD 卡中的视频 但我在这方面面临两个问题 1 当我打开在线视频应用程序时 它会显示视频 但不会播放视频 一段时间后
  • Android XML DOM 解析中如何解析同名标签?

    我无法在这里解析我的 XML 它仅返回 项目 My AndroidActivity由于太大而无法显示 这就是为什么我只展示了负责解析的部分 我的 XML 看起来像这样