各位csdn网友,哎,小弟无能,简单的java基于SAX读取xml文件也出错。
希望大家伸出你的手,救小弟一把!
代码片段:
/**
 * 读取XML文件所有信息
 */
public List LoadXML(String path) throws Exception {            .............
      /      /获取该部门第1个二级子元素集合---many or no a depInfo
List depInfoList  = depInfoRoot.getChildren();
         for(int x=0;x<depInfoList.size();x++){
//获取i2个二级子元素---depInfo
Element depInfo = (Element) depInfoList.get(x);
//获取并封装depModel的属性
if(depInfo==null){
System.out.println("ok is null");
break;
}/******调试depInfo不为null但奇怪的是是获取子节点就出错了****/
System.out.println("Xml get ="+depInfo.getChild("depCode").getText()); 
}

解决方案 »

  1.   

    我晕....!
    重新写一下代码
    depInfo.getChild("depCode").getText();
    问题就解决了,我真晕!
    还想请问一下,
    depInfo.getChildText("depCode")&depInfo.getChild("depCode").getText();
    两者一样吗
    depInfo.getChildText("depCode")有的时候这样获取不到值
      

  2.   

    /**
     * 解析XML
     * startDocument---》startElement--》characters---》endElement---》endDocument
     * 注意:startElement--》characters---》endElement反复调用
     * 
     * 取数据:解析节点--》取数据--》取数据
     * 
     * */ 1.sax解析XML文件:<?xml version="1.0" encoding="GB2312"?>
    <?xml-stylesheet href="student.xsl" type="text/xsl"?>
    <StudentInfo> <student>
      <name>达内</name>
      <sex>男</sex>
      <lesson>
       <lessonName>Java初级</lessonName>
       <lessonScore>85</lessonScore>
      </lesson>
      <lesson>
       <lessonName>Oracle数据库</lessonName>
       <lessonScore>95</lessonScore>
      </lesson>
      <lesson>
       <lessonName>Java中级</lessonName>
       <lessonScore>80</lessonScore>
      </lesson>
      <lesson>
       <lessonName>Java高级</lessonName>
       <lessonScore>100</lessonScore>
      </lesson>
     </student> <breakLine /> <student>
      <name>花木兰</name>
      <sex>女</sex>
      <lesson>
       <lessonName>射箭</lessonName>
       <lessonScore>100</lessonScore>
      </lesson>
      <lesson>
       <lessonName>柔道</lessonName>
       <lessonScore>95</lessonScore>
      </lesson>
      <lesson>
       <lessonName>国学</lessonName>
       <lessonScore>80</lessonScore>
      </lesson>
      <lesson>
       <lessonName>烹饪</lessonName>
       <lessonScore>60</lessonScore>
      </lesson>
      <lesson>
       <lessonName>游泳</lessonName>
       <lessonScore>70</lessonScore>
      </lesson>
     </student> <breakLine /></StudentInfo>2.java类如下:package com.yeg.xml;import java.io.IOException;import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;public class SAXParser { public static void main(String[] args) {  SAXParser sax = new SAXParser();
      sax.parseXMLFile("com//yeg//xml//student.xml");
     }
     /**
      * 解析文档
      * 
      * @param fileName
      *            XML文件的名字
      */
     private void parseXMLFile(String fileName) {  try {
       // 通过指定解析器的名称来动态加载解析器
       XMLReader parser = XMLReaderFactory
         .createXMLReader("org.apache.xerces.parsers.SAXParser");   // 处理内容前要注册内容管理器
       parser.setContentHandler(new XMLContentHandler());   // 开始解析文档
       parser.parse(fileName);
      } catch (IOException e) {
       e.printStackTrace();
      } catch (SAXException e) {
       e.printStackTrace();
      }
     }
    }
      package com.yeg.xml;import org.xml.sax.Attributes;
    import org.xml.sax.ContentHandler;
    import org.xml.sax.Locator;
    import org.xml.sax.SAXException;/**
     * 解析XML
     * startDocument---》startElement--》characters---》endElement---》endDocument
     * 注意:startElement--》characters---》endElement反复调用
     * 
     * 取数据:解析节点--》取数据--》取数据
     * 
     * */
    public class XMLContentHandler implements ContentHandler { // DTD中定义的元素名
     private static final String ELEMENT_NAME = "name"; private static final String ELEMENT_SEX = "sex"; private static final String ELEMENT_LESSON = "lesson"; private static final String ELEMENT_LESSON_NAME = "lessonName"; private static final String ELEMENT_LESSON_SCORE = "lessonScore"; private static final String ELEMENT_STUDENT = "student"; private static final String ELEMENT_LINE = "breakLine"; // 当前元素的数据
     private String currentData = ""; private String lessonName = ""; private String lessonScore = ""; /**
      * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
      * 
      * @param locator
      */
     public void setDocumentLocator(Locator locator) { } /**
      * 在解析整个文档开始时调用
      */
     public void startDocument() throws SAXException {
      System.out.println("XML文件开始解析");
     } /**
      * 在解析整个文档结束时调用
      */
     public void endDocument() throws SAXException {
      System.out.println("XML文件解析结束");
     } /**
      * 在解析命名空间开始时调用
      */
     public void startPrefixMapping(String prefix, String uri)
       throws SAXException { } /**
      * 在解析命名空间结束时调用
      */
     public void endPrefixMapping(String prefix) throws SAXException { } /**
      * 在解析元素开始时调用
      * 
      * @param namespaceURI
      * @param localName
      * @param qName
      * @param atts
      */
     public void startElement(String namespaceURI, String localName,
       String qName, Attributes atts) throws SAXException {
      System.out.println("Start");
     } /**
      * 在解析元素结束时调用
      * 
      * @param namespaceURI
      * @param localName
      *            本地名,如student
      * @param qName
      *            原始名
      */
     public void endElement(String namespaceURI, String localName, String qName)
       throws SAXException {
      if (localName.equals(ELEMENT_NAME)) {
       System.out.println(localName + ":" + currentData);
      }  else if (localName.equals(ELEMENT_SEX)) {
       System.out.println(localName + ":" + currentData);
      }  else if (localName.equals(ELEMENT_LESSON_NAME)) {
       this.lessonName = currentData;
      }  else if (localName.equals(ELEMENT_LESSON_SCORE)) {
       this.lessonScore = currentData;
      }  else if (localName.equals(ELEMENT_LESSON)) {
       System.out.println(lessonName + ":" + lessonScore);
      }  else if (localName.equals(ELEMENT_LINE)) {
       System.out.println("------------------------------------");
      }
     } /**
      * 取得元素数据
      * 
      * @param ch
      * @param start
      * @param length
      */
     public void characters(char[] ch, int start, int length)
       throws SAXException {
      currentData = new String(ch, start, length).trim();
      System.out.println("currentData-->" + currentData);
     } /**
      * 取得元素数据中的空白
      * 
      * @param ch
      * @param start
      * @param length
      */
     public void ignorableWhitespace(char[] ch, int start, int length)
       throws SAXException { } /**
      * 在解析到处理指令时,调用此方法。 这些处理指令不包括XML的版权指令,它由解析器本身识别。
      * 
      * @param target
      * @param data
      */
     public void processingInstruction(String target, String data)
       throws SAXException { } /**
      * 当未验证解析器忽略实体时调用此方法
      * 
      * @param name
      */
     public void skippedEntity(String name) throws SAXException { }
    }
      

  3.   

    你就是用了第三方的xml相关jar包吧?
    JDK内置的W3C Dom规范API里没有getChild 和getChildren这些方法啊?不过你这个问题应该首先认识到在XML结构中<value>Hello</value>这样的情况Hello单独算一个Text节点,作为value节点的Child存在,应该先判断Child节点的类型如果是Text,就调相关专门取Text值的函数