XML String 解析问题!!!急急急!!!
各位大虾,小弟有一个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经验或有相关经验或想参加讨论的朋友请进.....急!急!急!急!急!




