作者dask (乌乌阿阿)
看板java
标题Re: [问题] java xml dom 找名称值为空时的问题
时间Tue Dec 14 22:26:37 2010
※ 引述《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
1F:→ terrybob:谢谢,我最後选择用别的方式解决。(与java无关) 12/15 14:16