Re: [問題] java xml dom 找名稱值為空時的問題
※ 引述《terrybob (罪雲樵)》之銘言:
: 問題:
: 當我成功找到某一名稱,但若該名稱的值為空
: java就出錯了…我該如何去改java的程式呢?
: 可以找得xml名稱,但若他沒有值,就不去取值呢?
: 以xml檔案第16行為例:
: Age的內容為空值
: 我原先是用以下方式
: if( !doc.getElementsByTagName("Age").item(i).getFirstChild().
: getNodeValue().equals("") ){
: System.out.println(" 年紀: " + doc.getElementsByTagName("Age").
: item(i).getFirstChild().getNodeValue());
: }
: 但一樣出錯…請高手指教。
ㄝ..我沒有測過
不過單看你程式
你可能要先判斷
doc.getElementsByTagName("Age").item(i)
這個是否為null,更或許itme(i)就已經超過陣列範圍了...
如果doc.getElementsByTagName("Age").item(i) 他取不到值,當然getFirstChild()
就會有錯
所以建議你可以先逐步測試
不過其實java關於xml的操作有很多的API可以用
我最近用dom4j
是使用xpath的概念來找尋節點
用起來還滿方便的
提供你參考囉~~
: ----------------------------------------
: [xml檔案]
: <?xml version="1.0" encoding="UTF-8"?>
: <Personnel>
: <Employee type="permanent">
: <Name>Seagull</Name>
: <Id>3674</Id>
: <Age>34</Age>
: </Employee>
: <Employee type="contract">
: <Name>Robin</Name>
: <Id>3675</Id>
: <Age>10</Age>
: </Employee>
: <Employee type="permanent">
: <Name>Crow</Name>
: <Id>3676</Id>
: <Age />
: </Employee>
: </Personnel>
: [java程式]
: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
: try {
: //Using factory get an instance of document builder
: DocumentBuilder db = dbf.newDocumentBuilder();
: //parse using builder to get DOM representation of the XML file
: dom = db.parse("1.xml");
: File f=new File("1.xml");
: DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
: DocumentBuilder builder=factory.newDocumentBuilder();
: Document doc = builder.parse(f);
: NodeList nl = doc.getElementsByTagName("Employee");
: for (int i=0;i<nl.getLength();i++){
: System.out.print(" 姓名: " +
: doc.getElementsByTagName("Name").item(i).getFirstChild().getNodeValue());
: System.out.print(" 代號: " +
: doc.getElementsByTagName("Id").item(i).getFirstChild().getNodeValue());
: System.out.println(" 年紀: " +
: doc.getElementsByTagName("Age").item(i).getFirstChild().getNodeValue());
: }
: }catch(ParserConfigurationException pce) {
: pce.printStackTrace();
: }catch(SAXException se) {
: se.printStackTrace();
: }catch(IOException ioe) {
: ioe.printStackTrace();
: }
: -----
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.117.66.51
→
12/15 14:16, , 1F
12/15 14:16, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):