Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用DOM解析xml字符串_Android_Xml_Dom - Fatal编程技术网

如何在android中使用DOM解析xml字符串

如何在android中使用DOM解析xml字符串,android,xml,dom,Android,Xml,Dom,我有一个Android应用程序,可以从Web服务调用中获得xml响应。我正在尝试使用DOM解析器解析xml。我在获取StartDate标记以及call标记中其他标记的值时遇到问题。知道我哪里出错了吗。当我从startDate中注销该值时,它是空的。谢谢 public class DomParser { private static final String TAG = DomParser.class.getSimpleName(); DocumentBuilderFactory

我有一个Android应用程序,可以从Web服务调用中获得xml响应。我正在尝试使用DOM解析器解析xml。我在获取StartDate标记以及call标记中其他标记的值时遇到问题。知道我哪里出错了吗。当我从startDate中注销该值时,它是空的。谢谢

public class DomParser {

    private static final String TAG = DomParser.class.getSimpleName();
    DocumentBuilderFactory builderFactory;
    DocumentBuilder builder;
     Document document;

    public DomParser() {
        super();
        Log.e(TAG, "inside domparser constructor");
        builderFactory = DocumentBuilderFactory.newInstance();
        document = null;
        try {
            builder = builderFactory.newDocumentBuilder();
            Log.e(TAG, "built the dom factory");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();  
        }
    }// end of constructor


    public void parseXmlString(String str){

        try {
            String s = str.replace("&lt;", "<");
            String t = s.replace("&gt;", ">");
            document = builder.parse( new InputSource(new StringReader(t))); 
            Log.e(TAG, "document = " + document);
            Log.e(TAG, "str = " + t);
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.e(TAG, "about to parse the rootElement");
        Element rootElement = document.getDocumentElement();
        NodeList nodes = rootElement.getChildNodes();

        Node rota = nodes.item(0);
        NodeList callList = rota.getChildNodes();

        for(int i = 0; i < callList.getLength(); i++){

            Node call = callList.item(i);
            NodeList callChildrenList = call.getChildNodes();

            for(int j = 0; j < callChildrenList.getLength(); j++){
                Node callChild = callChildrenList.item(j);
                if(callChild instanceof Element){
                    //a child element to process
                    Element child = (Element) callChild;
                    String startDate = child.getAttribute("StartDate"); 
                    Log.e(TAG, "element StartDate = " + startDate);
                  }
            }

        }



    }//end of parseXmlString

}
公共类DomParser{
私有静态最终字符串标记=DomParser.class.getSimpleName();
文档构建器工厂构建器工厂;
文档生成器;
文件;
公共DomParser(){
超级();
Log.e(标记,“内部domparser构造函数”);
builderFactory=DocumentBuilderFactory.newInstance();
document=null;
试一试{
builder=builderFactory.newDocumentBuilder();
Log.e(标记“构建dom工厂”);
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}
}//构造函数结束
公共void parseXmlString(String str){
试一试{
字符串s=str.replace(“,”);
document=builder.parse(新的InputSource(新的StringReader(t));
Log.e(标签,“document=”+document);
Log.e(标签,“str=”+t);
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
Log.e(标记“即将解析根元素”);
Element rootElement=document.getDocumentElement();
NodeList nodes=rootElement.getChildNodes();
节点rota=节点。项(0);
NodeList callList=rota.getChildNodes();
对于(int i=0;i



10-05 15:49:17.680:E/DomParser(31495):2012-10-05T07:00:00+01:002012-10-05T07:25:00+01:00251完成的退潮帮助穿衣、洗衣、留下饮料、留下三明治等,制作热饮、准备早餐、淋浴、,时间段-早早餐47418572-73a1-4dab-bc24-739C122B2B2B2507:3007:492012-10-05T07:30:00+01:002012-10-05T08:00+01:00301完整的BrownMorgareCareline,糖尿病2型,空马桶,钥匙保险箱,留下饮料,做热饮,二级管理,准备零食,时间段-早睡14F4F796-c7a6-4942-9d91-e9e7a40394f508:0008:212012-10-05T08:00+01:002012-10-05T08:40:00+01:00401完整的房车钥匙保险箱,晨叫-起床和早餐,个人护理2A7E6C70-ee2c-4657-a313-a18b87a766ed08:3509:132T0012-10-059:00+01:002012-10-05T09:20:00+01:00,钥匙保险箱,必要时铺床/更换,药物-二级管理,个人护理,准备早餐,时间带-晚早餐383C9BE6-4cbe-459a-92ed-5dc309a0bffb2012-10-05T09:00+01:002012-10-05T09:30:00+01:00301需要的完整卡斯蒂克利迪亚克,留下饮料,留下三明治,做热饮,必要时铺床/更换,药物提示,药物-二级管理,个人护理,时间段-早餐F4C1F96-ef65-4231-9e03-0b8263b04d2709:2809:572012-10-05T10:30:00+01:002012-10-05T11:00:00+01:00301完成的特蕾特玛协助敷料,药物-自我用药,晨叫,个人护理,脱衣,时间段-晚早餐03F52182-b9ff-4fa9-9b71-1a20b8bbeeaa10:1010:572012-10-05T12:00:00+01:002012-10-05T12:15:00+01:00151完整的Garland消毒导管袋,药物提示,药物-二级管理,时间段-早午餐,如厕/便桶802D8ADF-3a80-40bd-be91-f29db7c1291e11:1611:382012-10-05T12:30:00+01:00基于您的新示例代码类似的内容

// HERE LOOP TO FIND THE NODE LIKE YOU HAVE DONE IN YOUR EXAMPLE
// WHERE YOU HAVE callChild.getNodeName() AND LOOK FOR THE ONE THAT IS "StartDate"
// ASSUMING startDateNode HERE IS THE NODE YOU WANT

    // GET THE CHILD NODES AND LOOK FOR THE TEXT NODE  
    NodeList nList = startDateNode.getChildNodes();
    for (int i=0; i < nList.getLength(); i++) {
       Node tmpNode = nList.item(i);
       if (tmpNode.getNodeType() == Node.TEXT_NODE) {
          String dateStr = ((CharacterData)tmpNode).getData();
           // NOW YOU HAVE THE CHARACTER DATA
          // DO SOMETHING WITH THE VALUE
       }
    }
//此处循环查找节点,就像您在示例中所做的那样
//其中有callChild.getNodeName()并查找“StartDate”
//假设startDateNode就是您想要的节点
//获取子节点并查找文本节点
NodeList nList=startDateNode.getChildNodes();
对于(int i=0;i
基于新示例代码的类似内容

// HERE LOOP TO FIND THE NODE LIKE YOU HAVE DONE IN YOUR EXAMPLE
// WHERE YOU HAVE callChild.getNodeName() AND LOOK FOR THE ONE THAT IS "StartDate"
// ASSUMING startDateNode HERE IS THE NODE YOU WANT

    // GET THE CHILD NODES AND LOOK FOR THE TEXT NODE  
    NodeList nList = startDateNode.getChildNodes();
    for (int i=0; i < nList.getLength(); i++) {
       Node tmpNode = nList.item(i);
       if (tmpNode.getNodeType() == Node.TEXT_NODE) {
          String dateStr = ((CharacterData)tmpNode).getData();
           // NOW YOU HAVE THE CHARACTER DATA
          // DO SOMETHING WITH THE VALUE
       }
    }
//此处循环查找节点,就像您在示例中所做的那样
//其中有callChild.getNodeName()并查找“StartDate”
//假设startDateNode就是您想要的节点
//获取子节点并查找文本节点
NodeList nList=startDateNode.getChildNodes();
对于(int i=0;i
要获得正确的想法,我已经在这样的代码中实现了。

要获得正确的想法,我已经在这样的代码中实现了。

嗨,有一个rota标记。在rota标签内有多个呼叫标签。在每个调用标记中都有各种标记,我需要这些标记来获取值。一旦我进入调用标记中,随后的每个值都必须填充到一个数组中。最终会有一个数组,它是数组的数组。例如在t
// HERE LOOP TO FIND THE NODE LIKE YOU HAVE DONE IN YOUR EXAMPLE
// WHERE YOU HAVE callChild.getNodeName() AND LOOK FOR THE ONE THAT IS "StartDate"
// ASSUMING startDateNode HERE IS THE NODE YOU WANT

    // GET THE CHILD NODES AND LOOK FOR THE TEXT NODE  
    NodeList nList = startDateNode.getChildNodes();
    for (int i=0; i < nList.getLength(); i++) {
       Node tmpNode = nList.item(i);
       if (tmpNode.getNodeType() == Node.TEXT_NODE) {
          String dateStr = ((CharacterData)tmpNode).getData();
           // NOW YOU HAVE THE CHARACTER DATA
          // DO SOMETHING WITH THE VALUE
       }
    }