zxd_72 2013-04-27 01:55 采纳率: 0%
浏览 2237

从xml中根据parent tag获取child tag

我用的下面的xml

<Point scount ="1">
  <Image name="app.png" />
</Point>

我需要解析 xml ,就像首先要 ,然后我需要选择 tag。
如何从xml中根据parent tag获取child tag呢?
我用下面的代码从 image tag 中取出值。

NodeList image = doc.getElementsByTagName("Image");
String imagess = ((Element)image.item(imageindex)).getAttribute("name");

如何实现?

  • 写回答

1条回答 默认 最新

  • july_apple 2016-01-19 08:38
    关注

    public void parsersXml() {

    //实例化一个文档构建器工厂

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    try {

    //通过文档构建器工厂获取一个文档构建器

    DocumentBuilder db = dbf.newDocumentBuilder();

    //通过文档通过文档构建器构建一个文档实例

    Document doc = db.parse("student.xml");

    //获取所有名字为 “person” 的节点

    NodeList nl1 = doc.getElementsByTagName("Point");

    int size1 = nl1.getLength();

                 System.out.println("该名称的节点长度为:" + size1);  
                     for (int i = 0; i < size1; i++) {  
                           Node n = nl1.item(i);  
                           System.out.println("***"+n.getNodeName()+"\t"+n.getNodeName().length());
                         NamedNodeMap  nm= n.getAttributes();
                         int len_m=nm.getLength();
                         for(int k=0;k<len_m;k++){
                             System.out.println("属性名:"+nm.item(k).getNodeName()+"\t  属性值:"+nm.item(k).getNodeValue());
                         }
                         if(nl1.item(i).getChildNodes().getLength()>0){
    
                             for(int z=0;z<nl1.item(i).getChildNodes().getLength();z++){
                                 System.out.println(nl1.item(i).getChildNodes().item(z).getNodeName());
                                 if(nl1.item(i).getChildNodes().item(z).getAttributes()!=null){
                                     int len_ls=nl1.item(i).getChildNodes().item(z).getAttributes().getLength();
                                     if(len_ls>0){
                                         for(int x=0;x<len_ls;x++){
                                             System.out.println("属性名:"+nl1.item(i).getChildNodes().item(z).getAttributes().item(x).getNodeName()+"\t  属性值:"+nl1.item(i).getChildNodes().item(z).getAttributes().item(x).getNodeValue());
                                         }
                                     }
    
                                 }
                             }
                         }
                     //获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。  
                     NodeList nl2 = n.getChildNodes();  
                     //因为上面的原因,在此例中第一个 n 节点有 2 个子节点,而第二个 n 节点则有 5 个子节点(因为多了3个回车)。  
                     int size2 = nl2.getLength();  
                     System.out.println("N节点的第一个子节点的长度为:" + size2);  
                     for (int j = 0; j < size2; j++) {  
                         Node n2 = nl2.item(j);  
                         NamedNodeMap  nm1= n2.getAttributes();
                        if(nm1==null){
                            break;
                        }
                         int len_m1=nm1.getLength();
                         for(int j1=0;j1<len_m1;j1++){
                             System.out.println(""+nm1.item(j1).getNodeName()+"\t"+nm1.item(j1).getNodeValue());
                         }
                         //还是因为上面的原因,故此要处判断当 n2 节点有子节点的时才输出。  
                         if (n2.hasChildNodes()) {  
                             System.out.println(n2.getNodeName() + " = " +  
                                                n2.getFirstChild().getNodeValue());  
                         }  
                     }  
                 }  
             } catch (ParserConfigurationException ex) {  
                 ex.printStackTrace();  
             } catch (IOException ex) {  
                 ex.printStackTrace();  
             } catch (SAXException ex) {  
                 ex.printStackTrace();  
             }  
         }  
    
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题