2014-04-08 2 views
0

(Param.xml) :구문 분석 XML 파일 (자바) 나는이 XML 파일이

private String paramReader(String tag) { 

    String value = ""; 
    try { 

     InputStream is = this.getClass().getClassLoader() 
       .getResourceAsStream("Param.xml"); 

     DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(is); 

     doc.getDocumentElement().normalize(); 

     NodeList nList = doc.getElementsByTagName("parameter"); 

     for (int i = 0; i < nList.getLength(); i++) { 

      Node nNode = nList.item(i); 
      System.out.println(nNode.getNodeValue()); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
       Element eElement = (Element) nNode; 

       if (eElement.getElementsByTagName("tag").item(0) 
         .getTextContent() == tag) { 

        value = eElement.getElementsByTagName("value").item(0) 
          .getTextContent(); 
       } 
      } 
     } 
     is.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return value; 

} 

이 반환 : 널 (null)을 I이 파일의 내용을 인쇄하기 위해 자바 코드를 작성

<?xml version="1.0" encoding="UTF-8"?> 

<param-config> 

    <parameter> 
     <tag> BNsprate </tag> 
     <value> 0.8 </value> 
    </parameter> 

    <parameter> 
     <tag> CellId_nbr </tag> 
     <value> 1 </value> 
    </parameter> 

    <parameter> 
     <tag> Calls_nbr </tag> 
     <value> 2 </value> 
    </parameter> 

    <parameter> 
     <tag> Call_time </tag> 
     <value> 00:02:00 </value> 
    </parameter> 

    <parameter> 
     <tag> InCalls_nbr </tag> 
     <value> 0 </value> 
    </parameter> 

    <parameter> 
     <tag> Sms_nbr </tag> 
     <value> 0 </value> 
    </parameter> 


</param-config> 

null null null null null 제발, 왜 콘텐츠 값을 가져 오지 않고 파일을 읽으려고하는지 묻고 싶습니다. 감사합니다. .

if(eElement.getElementsByTagName("tag").item(0).getTextContent()==tag){ 

대신은 다음과 같이해야한다 : 당신이 여기에 방법을 .equals 사용해야 동안

답변

0

수정 된 버전 아래 링크를 manipulate.Check하는 것은 매우 쉽습니다. 그러면 입력 태그 노드의 값 노드의 텍스트 내용을 가져옵니다.

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

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

/** 
* @author JayaPrasad 
* 
*/ 
public class ParseXml { 

    private String paramReader(String tag) { 

     String value = ""; 
     try { 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse("parse.xml"); 

      doc.getDocumentElement().normalize(); 

      NodeList nList = doc.getElementsByTagName("parameter"); 

      for (int i = 0; i < nList.getLength(); i++) { 

       Node nNode = nList.item(i); 
//    NodeList childNodes = nNode.getChildNodes(); 
//    for (int j = 0, length = childNodes.getLength(); j < length; j++) { 
       // System.out.println(childNodes.item(j).getNodeName() + ":" 
//     + childNodes.item(j).getTextContent()); 
//     if (childNodes.item(j).getNodeName().equals(tag)) { 
//      value = childNodes.item(j).getTextContent(); 
//      System.out.println("Tag Node Value ::: " + value); 
//     } 
//    } 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
        Element eElement = null; 
        if (nNode instanceof Element) { // Safest way before casting 
         eElement = (Element) nNode; 
        } 

        if (eElement.getElementsByTagName("tag").item(0) 
          .getTextContent().trim().equals(tag)) { 

         value = eElement.getElementsByTagName("value").item(0) 
           .getTextContent(); 
         System.out.println("Result value :: " + value); 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return value; 

    } 

    public static void main(String[] args) { 
     ParseXml xmlObj = new ParseXml(); 
     xmlObj.paramReader("Call_time"); 
    } 

} 
+0

고마워요. 하지만 문제는 여전히 동일합니다 ... – user3510024

+0

@ user3510024 와트는 실제 문제입니까? 어떤 노드 값이 필요합니까? – AJJ

+0

정확하게 "value"를 출력하고 싶지만 문제는 아무것도 출력하지 않는다는 것입니다 ("value"가 null이라는 뜻입니다). – user3510024

3

당신은 평등 기호를 사용하여 문자열로 문자열을 비교하는

if(eElement.getElementsByTagName("tag").item(0).getTextContent().equals(tag)){ 

== 기호를 확인 평등을 즉, 두 값이 메모리의 같은 객체를 참조하는 경우 true를 반환하고, 값의 동일성을 확인하려는 경우는 .equals() 메서드가 수행하는 값입니다.

+0

감사합니다. 하지만 문제가 해결되지 않으면 문제는 "nNode"의 다른 값을 인쇄 할 수 없다는 것입니다. "nList"가 비어있어 정확히 문제입니다. 6 개의 null 요소가 포함되어 있기 때문입니다. – user3510024