2010-03-02 4 views
0

내가 다시 도움이 필요해! : -/자바/JSP XML을

임 자바/JSP로이 XML 파일을 읽으려고 : 내 자바/JSP 코드 여기

<?xml version="1.0" encoding="iso-8859-1" ?> 
<universal_campaign> 
    <campaign_details> 
     <campaign_id></campaign_id> 
     <campaign_title>Test Campaign</campaign_title> 
     <campaign_sdate>2010-01-21</campaign_sdate> 
     <campaign_edate>2010-01-25</campaign_edate> 
     <campaign_priority>Normal</campaign_priority> 
    </campaign_details> 

    <campaign_schedule> 
     <schedule_sdate>2010-01-25</schedule_sdate> 
     <schedule_edate>2010-01-30</schedule_edate> 
     <schedule_priority>Normal</schedule_priority> 

     <schedule_content> 
      <content_name>Wallpaper_A</content_name> 
      <content_filename>WP_A.jpg</content_filename> 
     </schedule_content> 

     <schedule_content> 
      <content_name>Screensaver</content_name> 
      <content_filename>SCS.gif</content_filename> 
     </schedule_content> 


     <schedule_zone>universal.001 test 001</schedule_zone> 
     <schedule_zone>universal.001 test 002</schedule_zone> 
     <schedule_zone>universal.001 test 003</schedule_zone> 
    </campaign_schedule> 

</universal_campaign> 

을 :

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(fileName); 
NodeList nl, nl2; 
NodeList campaign_details = doc.getElementsByTagName("universal_campaign"); 
String res = ""; 

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

    nl = campaign_details.item(i).getChildNodes(); 

    for(int j = 0; j<nl.getLength();j++){        
    nl2 = nl.item(j).getChildNodes(); 

     for(int k = 0; k<nl2.getLength();k++){ 
     res += nl2.item(k).getNodeName()+": "+nl2.item(k).getNodeValue()+"<br />"; 
     } 
    } 

} 

그러나 때 출력 문자열 고해상도, I 수 :

#text: 
campaign_id: null 
#text: 
campaign_title: null 
#text: 
campaign_sdate: null 
#text: 
campaign_edate: null 
#text: 
campaign_priority: null 
#text: 
#text: 
schedule_sdate: null 
#text: 
schedule_edate: null 
#text: 
schedule_priority: null 
#text: 
schedule_content: null 
#text: 
schedule_content: null 
#text: 
schedule_zone: null 
#text: 
schedule_zone: null 
#text: 
schedule_zone: null 
#text: 

그리고 나는 그것을 얻지 않는다 ... 어떻게 getNodeName와()이 노드의 이름을 반환 할 수 있지만, getNodeValue()는 null를 돌려줍니다 ....? 는 제발 도와주세요, 나는 많은 검색을 수행하고 여기에 게시하기 전에 시도 실패,하지만 아무것도 .... 일하지 않은 : -/

답변

2

실제로 노드가 텍스트 노드 자체가 아닙니다. Element이고 getNodeValue은 null을 반환합니다 (표 here 참조). 대신 getTextContent을 사용해야합니다.

+0

고마워요! 하지만 여전히 "#text :"가 내 출력에 나타납니다 ... 왜? – Piero

+0

XML에 줄 바꿈이 있기 때문입니다. 공백은 공백 문자를 제외하고는 아무 것도없는 텍스트 노드로 취급됩니다. 따라서 원하는 요소를 알고 있다면 이러한 요소 만 필터링하는 것이 좋습니다. –

+0

아, 시간 내 주셔서 대단히 감사합니다! – Piero

2

사용 getTextContent() 또는, 더 나은, 더 나은 XML의 API (마음에 jdom 스프링)를 사용합니다.

+0

감사합니다. 하지만 여전히 "#text :"가 내 출력에 나타납니다 ... 왜? jdom을 체크 아웃합니다! 조언 해주셔서 감사합니다. – Piero