import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Test { /**
 * @param args
 */
public static void main(String[] args) {
    try {
        File file = new File("dongzuopian.xml");
         //解析器工厂类
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         //解析器
DocumentBuilder builder = factory.newDocumentBuilder();
  //操作的Document对象
Document document = builder.parse(file);
  //节点名
         NodeList nodelist = document.getElementsByTagName("PROGFILE");
         for(int i = 0; i<nodelist.getLength(); i++){
          System.out.println("--------"+(i+1)+"---------");
          System.out.println("电影名称:"+document.getElementsByTagName("progpackagename").item(i).getFirstChild().getNodeValue()); 
          System.out.println("电影介绍 :"+document.getElementsByTagName("description").item(i).getFirstChild().getNodeValue());
          //  System.out.println("电影图片 :"+document.getElementsByTagName("column").item(i).getFirstChild().getNodeValue().toString());
          System.out.println("电影演员 :"+document.getElementsByTagName("actors").item(i).getFirstChild().getNodeValue());  
          System.out.println("语种 :"+document.getElementsByTagName("audiolanguage").item(i).getFirstChild().getNodeValue());  
          System.out.println("图片 :"+document.getElementsByTagName("FILE").item(i).getAttributes().getNamedItem("FILENAME").toString());
        }
      List list=new ArrayList();
      list.add(nodelist);
      System.out.println(nodelist.getLength());
      
      
    } catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}<?xml version="1.0" encoding="utf-8"?>
<root>
<column DEFCATCODE="dongzuopian" name="动作片" COUNTNUMB="30" COUNTONEPAGE="5"> //栏目CODE,栏目名称、节目包总个数、每页显示条数
      <PROGPACKAGEINFO LNUM="" VALID_FROM="" VALID_TO="" VALID_FLAG="" PRODUCTNAME="" UPDATETIME="" DEFCATSEQ="">
<APP EPICODENUMBER="" PROGPACKAGEID="PPVP20091208102126000812" PROGPACKAGENAME="" PROGTYPE="" STYLEID="" 
SUMFILESIZE="" UPDATEMANID="" UPDATETIME="" />
 <METADATA>
<GP CHNAME="节目包描述" ENAME="Desc">
<progpackageid CHNAME="节目包ID"/>
<ptglobalid CHNAME="GLOBALID"/>
<progpackagename CHNAME="名称">谍影重重3 </progpackagename>
<titlebrief CHNAME="名称简写"/>
<actors CHNAME="演员">马特&#183;达蒙茱莉亚&#183;史提尔琼&#183;艾伦</actors>
<countrydist CHNAME="国家/地区">美国</countrydist>
<director CHNAME="导演">保罗&#183;格林加斯</director>
<subtitlelanguage CHNAME="字幕语种">简体中文</subtitlelanguage>
<epicodenumber CHNAME="集数"/>
<audiolanguage CHNAME="音频语种">英语</audiolanguage>
<issuedate CHNAME="发行日期">2007-07-25</issuedate>
<shootdate CHNAME="拍摄年代">2009</shootdate>
<subscriberstime CHNAME="开始期限">2009-12-01</subscriberstime>
<subscriberetime CHNAME="结束期限">2010-11-05</subscriberetime>
<description CHNAME="简介">他是一个没有国籍、没有身份、没有过去的人
        </description>
</GP>
<GP CHNAME="附件" ENAME="appendix">
</GP>
</METADATA>
<PROGFILE>
<FILE FILECODE="H264MAIN" FILENAME="PRVE001.ts" FILETYPEID="H264" PROGFILEID="PRVE20091208092222000031010001" PROGRAMID="PRVE20091208092222000031"/>
        <FILE FILECODE="PNG1" FILENAME="PPVP001.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010001" PROGRAMID=""/>
        <FILE FILECODE="PNG2" FILENAME="PPVP002.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010002" PROGRAMID=""/>
        <FILE FILECODE="PNG3" FILENAME="PPVP003.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010003" PROGRAMID=""/>
    </PROGFILE>
</PROGPACKAGEINFO>


<PROGPACKAGEINFO LNUM="" VALID_FROM="" VALID_TO="" VALID_FLAG="" PRODUCTNAME="" UPDATETIME="" DEFCATSEQ="">
<APP EPICODENUMBER="" PROGPACKAGEID="PPVP20091208102126000812" PROGPACKAGENAME="" PROGTYPE="" STYLEID="" 
SUMFILESIZE="" UPDATEMANID="" UPDATETIME="" />
 <METADATA>
<GP CHNAME="节目包描述" ENAME="Desc">
<progpackageid CHNAME="节目包ID"/>
<ptglobalid CHNAME="GLOBALID"/>
<progpackagename CHNAME="名称">十月围成 </progpackagename>
<titlebrief CHNAME="名称简写"/>
<actors CHNAME="演员">文森特&#183;莉亚&#183;琼&#183;艾伦</actors>
<countrydist CHNAME="国家/地区">美国</countrydist>
<director CHNAME="导演">保罗&#183;格林加斯</director>
<subtitlelanguage CHNAME="字幕语种">简体中文</subtitlelanguage>
<epicodenumber CHNAME="集数"/>
<audiolanguage CHNAME="音频语种">英语</audiolanguage>
<issuedate CHNAME="发行日期">2007-07-25</issuedate>
<shootdate CHNAME="拍摄年代">2009</shootdate>
<subscriberstime CHNAME="开始期限">2009-12-01</subscriberstime>
<subscriberetime CHNAME="结束期限">2010-11-05</subscriberetime>
<description CHNAME="简介"> 巨星演绎精彩</description>
</GP>
<GP CHNAME="附件" ENAME="appendix">
</GP>
</METADATA>
<PROGFILE>
<FILE FILECODE="H264MAIN" FILENAME="PRVE002.ts" FILETYPEID="H264" PROGFILEID="PRVE20091208092222000031010001" PROGRAMID="PRVE20091208092222000031"/>
        <FILE FILECODE="PNG1" FILENAME="PPVP005.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010001" PROGRAMID="1"/>
        <FILE FILECODE="PNG2" FILENAME="PPVP20091208102126000812010006.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010002" PROGRAMID="2"/>
        <FILE FILECODE="PNG3" FILENAME="PPVP20091208102126000812010007.png" FILETYPEID="PNG" PROGFILEID="PPVP20091208102126000812010003" PROGRAMID="3"/>
    </PROGFILE>
</PROGPACKAGEINFO>
</column>
</root>
为什么我PROGFILE节点下的 图片和路径都不能获取到啊?请大家帮忙解决下 谢谢。

解决方案 »

  1.   


    import java.io.File;
    import java.io.IOException;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.TransformerException;import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;import com.sun.org.apache.xpath.internal.XPathAPI;
    public class Test {    /**
         * @param args
         * @throws TransformerException 
         */
        public static void main(String[] args) throws TransformerException {
        try {
            File file = new File("E://a.xml");
                //解析器工厂类
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                //解析器
            DocumentBuilder builder = factory.newDocumentBuilder();
              //操作的Document对象
            Document document = builder.parse(file);
              //节点名
            NodeList nodelist = XPathAPI.selectNodeList(document,"root/column/PROGPACKAGEINFO");
             System.out.println(nodelist.getLength());
             for(int i = 0; i<nodelist.getLength(); i++){
              System.out.println("--------"+(i+1)+"---------");
              System.out.println("电影名称:"+document.getElementsByTagName("progpackagename").item(i).getFirstChild().getNodeValue()); 
              System.out.println("电影介绍 :"+document.getElementsByTagName("description").item(i).getFirstChild().getNodeValue());
              System.out.println("电影演员 :"+document.getElementsByTagName("actors").item(i).getFirstChild().getNodeValue());  
              System.out.println("语种 :"+document.getElementsByTagName("audiolanguage").item(i).getFirstChild().getNodeValue());
              
              Node pictureNode = nodelist.item(i);
              NodeList pictureNodeList = XPathAPI.selectNodeList(pictureNode,"PROGFILE/FILE");
              System.out.println(pictureNodeList.getLength());
              for(int j=0;j<pictureNodeList.getLength();j++)
              {
                  System.out.println("图片 :"+pictureNodeList.item(j).getAttributes().getNamedItem("FILENAME"));
              }
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
        }
    }
    是想这样不
      

  2.   

    hedangqing 建议的对,应该使用 XPath 。最好使用 SAX + XPath 的方式解析 XML 。
      

  3.   

    String imagefile1 = "'"
    + document.getElementsByTagName("FILE").item(1 + i * 4)
    .getAttributes().item(1).getFirstChild()
    .getNodeValue() + "'";
    if (imagefile1 != null) {
    imagelist.add(imagefile1); }
    // 获得电影图片2
    String imagefile2 = "'"
    + document.getElementsByTagName("FILE").item(2 + i * 4)
    .getAttributes().item(1).getFirstChild()
    .getNodeValue() + "'";
    if (imagefile2 != null) {
    imagelist.add(imagefile2); }
    // 获得电影图片3
    String imagefile3 = "'"
    + document.getElementsByTagName("FILE").item(3 + i * 4)
    .getAttributes().item(1).getFirstChild()
    .getNodeValue() + "'"; if (imagefile3 != null) {
    imagelist.add(imagefile3); }