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
    可以参考下这个文章

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗