CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web Services / XML

XML String 解析问题!!!急急急!!!

楼主jervisw(一蓑烟雨任凭生)2005-08-04 12:22:30 在 Java / Web Services / XML 提问

各位大虾,小弟有一个XML格式的String要解析,格式如下:  
  <events>  
      <event>  
          <eventid>event   type   id</eventid>  
          <when>number   of   seconds   since   meeting   started</when>  
          <p1>   parameter     1</p1>  
          <p2>   parameter     2</p2>  
          <p3>   parameter     3</p3>  
          <p4>   parameter     4</p4>  
          <p5>   parameter     5</p5>  
          <p6>   parameter     6</p6>  
      </event>  
      <event>   …   …       </event>  
  </events>  
   
  我的代码如下:  
  DocumentBuilder   builder   =   factory.newDocumentBuilder();  
  Document   doc   =   builder.parse(new   InputSource(new   StringReader(XMLString)));  
  NodeList   nodeList   =   doc.getElementsByTagName("event");  
  for   (int   i   =   0;   i   <   nodeList.getLength();   i++)   {  
      Element   element   =   (Element)nodeList.item(i);  
      ...  
  }  
  当我用Element   element   =   (Element)nodeList.item(i);转换时会抛出ClassCastException,用log输出  
  nodeList.item(i)得到输出如下:  
  [DEBUG]           EventAction     -   [eventid:   null]  
  [DEBUG]           EventAction     -   [when:   null]  
  [DEBUG]           EventAction     -   [p1:   null]  
  [DEBUG]           EventAction     -   [p2:   null]  
  [DEBUG]           EventAction     -   [p3:   null]  
  [DEBUG]           EventAction     -   [p4:   null]  
  [DEBUG]           EventAction     -   [p5:   null]  
  [DEBUG]           EventAction     -   [p6:   null]  
  请教各位大虾这是什么原因造成的,如何解决!!! 问题点数:100、回复次数:10Top

1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-08-04 12:26:50 得分 0

for   (int   i   =   0;   i   <   nodeList.getLength();   i++)   {  
          Node   aNode   =   nodeList.item(i);  
          if(aNode.getNodeType()==   Node.ELEMENT_NODE)   {  
              Element   element   =   (Element)a;  
          }  
      ...  
  }  
  因为nodeList里面的node有可能是text型的,所以要先判断一下再转型  
  Top

2 楼jervisw(一蓑烟雨任凭生)回复于 2005-08-04 12:36:14 得分 0

我试了一下aNode.getNodeType()==   Node.ELEMENT_NODE   为false,但现在的问题是我怎么才能得到字符串<events><event><eventid>1</eventid><when>0</when><p1>   CSR   Name</p1><p2></p2><p3></p3><p4></p4><p5></p5><p6></p6></event><event><eventid>2</eventid><when>11</when><p1>Customer1   </p1><p2></p2><p3></p3><p4></p4><p5></p5><p6></p6></event></events>里面的属性值呢?Top

3 楼CJMaster(新兵)回复于 2005-08-04 13:17:22 得分 10

element.getNodeValue();Top

4 楼jervisw(一蓑烟雨任凭生)回复于 2005-08-04 13:20:29 得分 0

Element   element   =   (Element)nodeList.item(i);转换时会抛出ClassCastExceptionTop

5 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-08-04 13:20:58 得分 40

我给你我刚刚写的代码,你照着改改就可以了  
   
  Element   root=getXMLRoot();  
                  NodeList   nl   =   root.getChildNodes();  
  for   (int   i   =   0;   i   <   nl.getLength();   i++)   {  
  Node   aNode   =   nl.item(i);  
  if   (aNode.getNodeType()   ==   Node.ELEMENT_NODE)   {  
  if   (aNode.getNodeName().equals("Group"))   {  
                  NodeList   gnl   =   aNode.getChildNodes();  
           
          for   (int   j   =   0;   j   <   gnl.getLength();   j++)   {  
  Node   gNode   =   gnl.item(j);  
  if   (gNode.getNodeType()   ==   Node.ELEMENT_NODE)   {          
  if   (gNode  
  .getNodeName()  
  .equals("OwnedCases"))   {  
          NodeList   cNL   =   gNode.getChildNodes();  
  for   (int   k   =   0;   k   <   cNL.getLength();   k++)   {  
  Node   caseNode   =   cNL.item(k);  
  if   (caseNode.getNodeType()  
  ==   Node.ELEMENT_NODE)   {  
  if   (caseNode  
  .getNodeName()  
  .equals("Case"))   {  
          }  
  }  
  }  
  }  
  else   if(gNode  
  .getNodeName()  
  .equals("SimilarityMatrix"))   {          
          }  
  else   if(gNode  
  .getNodeName()  
  .equals("Patition"))   {          
        }  
  }  
          }  
  }  
  }  
  }Top

6 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-08-04 13:21:19 得分 0

private   String   getElementText(Element   e)   {  
  NodeList   nl   =   e.getChildNodes();  
  for   (int   i   =   0;   i   <   nl.getLength();   i++)   {  
  Node   n   =   nl.item(i);  
  if   (n   instanceof   org.w3c.dom.Text)   {  
  return   n.getNodeValue();  
  }  
  }  
  return   "";  
  }Top

7 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-08-04 13:22:59 得分 0

要得到text值,需要下面这样操作  
   
  if(gNode.getNodeName().equals("Patition"))   {         String   text=getElementText((Element)gNode);  
        }  
  Top

8 楼hykwolf(Yankang Hu)回复于 2005-08-04 13:26:45 得分 50

System.out.println(nodeList.item(i).getNodeType());  
  看看他的类型是什么,去Node里的静态参数对照一下。  
  按说应该是1的,1就是Element.我试过你这段xml,我这里测试通过的,我只是把你的p1,p2,p3的节点名都改成p了,测试是通过的  
  DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(......)Top

9 楼jervisw(一蓑烟雨任凭生)回复于 2005-08-04 13:44:44 得分 0

我的nodeList.item(i).getNodeType()值为1,但是只要用Element   element   =   (Element)nodeList.item(i)转换时就会抛出异常Top

10 楼jervisw(一蓑烟雨任凭生)回复于 2005-08-04 14:04:14 得分 0

谢谢各位大虾,是我自己一个不小心的错误造成的,我的Element和Node不是一个包Top

相关问题

  • 如何將XML文件中的文本解析出來?急急急急急急急急急急急急急急....................
  • 急急急急急!跪求!关于解析XML
  • 关于解析XML的问题,急急急
  • 那里有下载PHP解析器FOR WIN2000急急急急急急急急急急急急急急急急急急急急急急急急
  • 急急急急急急急急急急急急急,怎样判断是哪个域名解析的?
  • 急急急,请问如何在SAX解释器中获得当前解析的XML文档的行数(即当前正在解析第几行)?
  • xml解析
  • xml解析
  • PHP解析XML
  • 我的XML为什么不能传中文?一加中文我的JAVE->SERVLET就不能解析.有XML经验或有相关经验或想参加讨论的朋友请进.....急!急!急!急!急!

关键词

  • 代码
  • root
  • xml
  • 解析
  • nodelist
  • 格式
  • parameter
  • 如下
  • element
  • builder

得分解答快速导航

  • 帖主:jervisw
  • CJMaster
  • jFresH_MaN
  • hykwolf

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo