首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从所有xml中获取特定字段的数据

如何从所有xml中获取特定字段的数据
EN

Stack Overflow用户
提问于 2015-01-15 00:09:47
回答 1查看 37关注 0票数 0

我的Xml响应中有这种来自服务器的数据,它以“NewDataSet”标签开始和结束,在这个标签下有几个“表”标签。在这个table标记中,我想从所有的Table标记中获取一些字段的值,比如CallDate,CallDuration。这样我就可以相应地显示数据。但在所有的网络教程中,他们都是在解析后显示数据的。所以我的问题是如何从这个Xml .I中所有表标签的特殊字段中获取数据。我确信我的问题已经很清楚了。请帮帮我

代码语言:javascript
复制
<NewDataSet>
<Table>
<CallDetailId>06012015192014733680011</CallDetailId>
<CallID>83A26D3811000100</CallID>
<CorrelatorId />
<EncryptedCall>false</EncryptedCall>
<CallDate>2015-01-06 19:20:14</CallDate>
<CalledBy>337</CalledBy>
<CalledTo>368</CalledTo>
<IsExternal>false</IsExternal>
<RecorderType>PRIMARY</RecorderType>
<FirstName />
<LastName />
<Comments />
<FlagID>1</FlagID>
<FlagImage>1.gif</FlagImage>
<CallDirection>I</CallDirection>
<FLAGTEXT>Training required</FLAGTEXT>
<Archive>true</Archive>
<ExtensionValue>368</ExtensionValue>
</Table>
<Table>
<AgentHangup>true</AgentHangup>
<CallDetailId>060120151424080020030003</CallDetailId>
<CallID>1F5D6D3803000100</CallID>
<CorrelatorId />
<CallDuration>5</CallDuration>
<EncryptedCall>false</EncryptedCall>
<CallDate>2015-01-06 14:24:08</CallDate>
<CalledBy>2003</CalledBy>
<CalledTo>210</CalledTo>
<IsExternal>false</IsExternal>
<RecorderType>PRIMARY</RecorderType>
<FirstName />
<LastName />
<Comments />
<FlagID>1</FlagID>
<FlagImage>1.gif</FlagImage>
<AF>C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\OmniPCXRecord\OmniPCXRECORDAudio\Repository\from\150106\0207\202_06012015 142408003_0003_2003.wav</AF>
<CallDirection>O</CallDirection>
<FLAGTEXT>Training required</FLAGTEXT>
<Archive>false</Archive>
<ExtensionValue>2003</ExtensionValue>
<GraphValue />
</Table>

我正在做这个

代码语言:javascript
复制
    result = xmlStringComingFromServer
    Document dom = null;
                    DocumentBuilder builder;
                    DocumentBuilderFactory factory;
                    try {
                        InputStream resultStream = new ByteArrayInputStream(results.getBytes("utf-8"));
                        factory = DocumentBuilderFactory.newInstance();
                        builder = factory.newDocumentBuilder();
                        dom = builder.parse(resultStream);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    } catch (ParserConfigurationException e) {
                        e.printStackTrace();
                    } catch (SAXException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    if (dom != null) {
                        Log.v("Dom is Not Null", dom.toString() + "");
                        NodeList nodeList = dom.getElementsByTagName("NewDataSet");



                        /*




                        putting new data here
                         */

                        menuItems = new ArrayList<HashMap<String, String>>();


//                        NodeList nl = dom.getElementsByTagName(KEY_ITEM);

                        // looping through all item nodes <item>
                        for (int i = 0; i < nodeList.getLength(); i++) {
                            // creating new HashMap
                            Log.v("For Rounds",i+"");
                            Element e = (Element)nodeList.item(i);

                            // adding each child node to HashMap key => value
                            map.put("Table",e.getElementsByTagName("Table").item(i).getTextContent());
                            //map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
//                            map.put("CallDuration",e.getElementsByTagName("CallDuration").item(0).getTextContent());
//                            map.put("CalledBy",e.getElementsByTagName("CalledBy").item(0).getTextContent());
//                            map.put("CalledTo",e.getElementsByTagName("CalledTo").item(0).getTextContent());
//                            map.put("FirstName",e.getElementsByTagName("FirstName").item(0).getTextContent());
//                            map.put("LastName",e.getElementsByTagName("LastName").item(0).getTextContent());

                            // adding HashList to ArrayList
                            menuItems.add(map);
                    }
EN

回答 1

Stack Overflow用户

发布于 2015-01-15 02:22:57

与加载Dom相比,您可以使用XmlPullParser更快地解析XML语言,并且更有效地利用内存。

代码语言:javascript
复制
 try {
      XmlPullParser xpp;
      XmlPullParserFactory factory = null;
        factory = XmlPullParserFactory.newInstance();
        xpp = factory.newPullParser();
        xpp.setInput(mInput, "UTF-8");

        String N = "";  //I know it's capitalized but that's how I do temp strings.

        int eventType = xpp.getEventType();
        while (true) {
            if (eventType == XmlPullParser.START_TAG) {
                // code taken from AsyncTask check cancel each loop your code 
                // may not need this check
                if (isCancelled()) {
                    return RESULT_ABORTED;  
                }
                N = xpp.getName();
                if (N.equals("CallDate")) {
                    String callDate = xpp.getText();
                } else if (N.equals("somethingelse")) {
                    String somethingelse = xpp.getText();
                }
            } else if (eventType == XmlPullParser.END_DOCUMENT) {
                break;
            }
            eventType = xpp.next();
        }

    } catch (XmlPullParserException e) {
        e.printStackTrace();
        ret = RESULT_ERROR;
    } catch (IOException e) {
        ret = RESULT_ERROR;
        e.printStackTrace();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27947410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档