【问题标题】:Parsing xml in java在java中解析xml
【发布时间】:2016-10-31 22:03:52
【问题描述】:

这是我的部分 xml 文件

 <IOStatusSummary>
         <iostatus_interval_value>
               <count>0</count> 
              <iostatusvalue datainterval="2016-01-16 15:45:30">1.0</iostatusvalue> 
              <iostatusvalue datainterval="2016-01-16 19:47:29">0.0</iostatusvalue> 
               <iostatusvalue datainterval="2016-05-16 13:01:07">1.0</iostatusvalue> 
               <iostatusvalue datainterval="2016-05-16 18:51:33">0.0</iostatusvalue> 
               <iostatusvalue datainterval="2016-05-27 16:45:50">1.0</iostatusvalue> 
                <iostatusvalue datainterval="2016-05-27 20:56:00">0.0</iostatusvalue> 
                 <iostatusvalue datainterval="2016-06-10 10:21:28">1.0</iostatusvalue> 
                 <iostatusvalue datainterval="2016-06-10 20:01:17">0.0</iostatusvalue> 
         </iostatus_interval_value>
 </IOStatusSummary>

我想做的是

DocumentBuilder db1 = DocumentBuilder db1 = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is1 = new InputSource();
    is1.setCharacterStream(new StringReader(xmlResult));
    Document doc1 = db1.parse(is1);

    NodeList nList_interval=doc1.getElementsByTagName("iostatus_interval_value");          

     List on = new ArrayList();
     List off = new ArrayList();

      for (int =0; i < nList_interval.getLenght(); i ++ ){

       Node currentItem2= nList_interval.item(iter);

         Element element2 = (Element) currentItem2;

         String iostatusvalue = element2.getElementsByTagName("iostatusvalue").item(i).getTextContent();

      if(iostatusvalue.equals("1.0"))
       {
 on.add(element1.getAttribute("datainterval")));                                                           

       }


       if(iostatusvalue.equals("0.0"))
        {    

  off.add("element1.getAttribute("datainterval"))");

        }

       }

然后我正在打印我期待的内容

on = { 2016-01-16 15:45:30" , 2016-05-16 13:01:07 , 2016-05-27 16:45:50,2016-06-10 10:21:28}

关闭 = { 2016-01-16 19:47:29, 2016-05-16 18:51:33, 2016-05-27 20:56:00, 2016-06-10 20:01:17 }

我的列表是空的,上面的 xml 不完整 xml 它是 xml 的一部分。

但我没有得到我所期望的,我认为我在某个地方犯了逻辑错误,因为我是新手。

感谢您阅读我的问题。

【问题讨论】:

  • 你得到了什么?
  • 您的 XML 无效。它以结束标签开始
  • 那是我的打字错误
  • 我得到两个列表都是空的。
  • @shreerambanne 您是否尝试过使用调试器来找出发生了什么?

标签: java xml parsing dom xml-parsing


【解决方案1】:

试试这个:

    String xml = "<IOStatusSummary><iostatus_interval_value><count>0</count><iostatusvalue datainterval=\"2016-01-16 15:45:30\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-01-16 19:47:29\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-16 13:01:07\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-16 18:51:33\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-27 16:45:50\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-05-27 20:56:00\">0.0</iostatusvalue><iostatusvalue datainterval=\"2016-06-10 10:21:28\">1.0</iostatusvalue><iostatusvalue datainterval=\"2016-06-10 20:01:17\">0.0</iostatusvalue></iostatus_interval_value></IOStatusSummary>";
    ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes());
    DocumentBuilder db1 = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc1 = db1.parse(bais);

    NodeList nList_interval = doc1.getElementsByTagName("iostatus_interval_value").item(0).getChildNodes();

    List<String> on = new ArrayList<String>();
    List<String> off = new ArrayList<String>();

    for (int i = 0; i < nList_interval.getLength(); i++) {
        Element element = (Element) nList_interval.item(i);
        if (element.getTagName().equals("iostatusvalue")) {
            String text = element.getTextContent();
            String interval = element.getAttribute("datainterval");
            if (text.equals("1.0")) {
                on.add(interval);
            }
            if (text.equals("0.0")) {
                off.add(interval);
            }
        }
    }
    System.out.println(on);
    System.out.println(off);

这个例子的主要区别是这一行:

NodeList nList_interval = doc1.getElementsByTagName("iostatus_interval_value").item(0).getChildNodes();

这样做是为了获取第一个iostatus_interval_value 元素的所有子元素的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2012-11-17
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多