2012-04-23 4 views
0

DOM을 사용하여 xml에서 데이터를 읽는 데 문제가 있습니다. 나는 왜 "System.out.println (nNode.getChildNodes(). item (0) .hasAttributes());"을 " false를 반환합니다 ... 내 XML 파일에서이 노드는 특성을 포함합니다. 제발 도와 주실 수 있나요?xml - java, dom

import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class XmlParser { 
    private String[] linia; 
    private String[] wariant; 
    private String[] przystanek; 
    private String[] tabliczka; 
    private String[] dzien; 
    private String[] godz; 
    private String[] min; 

    public void readXml() { 
     try { 

      File fXmlFile = new File("c:\\file.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 
      doc.getDocumentElement().normalize(); 

      System.out.println("Root element :" 
        + doc.getDocumentElement().getNodeName()); 
      NodeList nList = doc.getElementsByTagName("linia"); 
      System.out.println("-----------------------"); 

      Node nNode = nList.item(0); 
      linia = new String[nNode.getAttributes().getLength()]; 
      System.out.println(nNode.getAttributes().getLength()); 
      int i = 0; 
      while (i < nNode.getAttributes().getLength()) { 
       linia[i] = nNode.getAttributes().item(i) + ""; 
       System.out.print(linia[i] + " "); 
       i++; 
      } 

      wariant = new String[nNode.getChildNodes().getLength()]; 
      System.out.println(); 
      System.out.println(nNode.getChildNodes().getLength()); 
      System.out.println(nNode.getNodeName()); 
      int j = 0; 
      System.out.println(nNode.getChildNodes().item(0).hasAttributes()); 
      while (j < nNode.getChildNodes().getLength()) { 

       wariant[j] = nNode.getChildNodes().item(j).getAttributes() 
         .item(0) 
         + ""; 
       // if(wariant[j].toString()!=null) 
       System.out.println(" " + wariant[j]); 
       j++; 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+2

파일의 내용을 게시 할 수 있습니까 – ant

답변

2

당신이 인덱스 1의 자식 노드를 확인 했 :

이 내 코드? 내 생각 엔 파서는 태그 (개행, 탭, 공백) 사이의 모든 문자를 CDATA로보고 속성이없는 CDATA 노드로 파싱합니다.

+0

+1도 같은 느낌입니다. – TechSpellBound

+0

예, 당신이 옳았습니다. 그러나 그것은 나에게는 이상하다. 다른 모든 속성이 null 인 것처럼 보입니다. 왜 그렇게 이상하게 작동합니까? 나는 "j = j + 2"를해야만한다. – insosfd