qiao88
2009-02-20 10:31
浏览 197
已采纳

Dom解析xml问题

项目中要解析xml
我选择了Dom解析

先看代码在提问:

tt.xml
[code="java"]
08:00
AM
电影:追女仔
湖北省 | 湖北电视台 | 湖北影视频道


/diffgr:diffgram[/code]

java代码

[code="java"]DocumentBuilderFactory dbf=null;
dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
db=dbf.newDocumentBuilder();
Document d=null;
d=db.parse(new File("tt.xml"));
NodeList n=null;
n=d.getElementsByTagName("tvProgramTable");
Node node=null;
for(int i=0;i<n.getLength();i++){

        node=n.item(0);//为什么是0啊,1不行
        node=node.getChildNodes().item(1);//为什么要是1啊,0不行
        System.out.println("value is"+node.getTextContent());

    }[/code]

控制台: value is 08:00

还有下面的Java代码

[code="java"]DocumentBuilderFactory dbf=null;
dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
db=dbf.newDocumentBuilder();
Document d=null;
d=db.parse(new File("tt.xml"));
NodeList n=null;
n=d.getElementsByTagName("tvProgramTable");
Node node=null;
for(int i=0;i<n.getLength();i++){

        node=n.item(0);
        node=node.getFirstChild();
        System.out.println("value is"+node.getTextContent());

    }[/code]                

上面的代码不能输出08:00

做测试如下

[code="java"]
DocumentBuilderFactory dbf=null;
dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
db=dbf.newDocumentBuilder();
Document d=null;
d=db.parse(new File("tt.xml"));
NodeList n=null;
n=d.getElementsByTagName("tvProgramTable");
Node node=null;
for(int i=0;i<n.getLength();i++){

        node=n.item(0);
                NodeList nl=node.getChildNodes();
                    for(int k=0;k<nl.getLength();k++){

             System.out.println((k+"*******************************************"));
             System.out.println(k+"node name is"+nl.item(k).getNodeName());

             if(nl.item(k).getNodeName().equals("#text") ){
                 System.out.println("values is "+((Text)nl.item(k)).getWholeText());
             }else{
                 System.out.println("values is "+((Text)nl.item(k).getFirstChild()).getWholeText());

             }

        }

    }


[/code]

控制台输出如下:

[code="java"]0*******************************************
0node name is#text
values is

1*******************************************
1node name isplayTime
values is 08:00
2*******************************************
2node name is#text
values is

3*******************************************
3node name ismeridiem
values is AM
4*******************************************
4node name is#text
values is

5*******************************************
5node name istvProgram
values is 电影:追女仔
6*******************************************
6node name is#text
values is

7*******************************************
7node name istvStationInfo
values is 湖北省 | 湖北电视台 | 湖北影视频道
8*******************************************
8node name is#text
values is [/code]

得到如下结论:
也就是每个节点的前面都加了 Text 它的值为空;

如果一个节点是最后的节点(不包括Text),要得到他的text ,可有用

Text t=(Text)node.getfirstchild();

valus is t.getDate();

希望来者指点指点
在这先谢谢了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • langhua9527 2009-02-20 12:03
    已采纳

    http://langhua9527.iteye.com/blog/326247
    可以参考下这个文章

    点赞 打赏 评论

相关推荐 更多相似问题