자바

2011-05-04 2 views
1

를 사용하여 XML에 CDATA로 통과하는 방법 나는 단지 값 1을 얻으려면이자바

<params> 
      <param index="0"> 
       <value> 
       <![CDATA[value1]]> 
       </value> 
      </param> 
      <param index="1"> 
       <value> 
       <![CDATA[value2]]> 
       </value> 
      </param> 
      <param index="2"> 
       <value> 
       <![CDATA[value3]]> 
       </value> 
      </param> 
      <param index="3"> 
       <value> 
       <![CDATA[value4]]> 
       </value> 
      </param> 
      </params> 

같은 XML 파일이 있습니다. 사람이 그냥 value1하려면이

답변

2
import java.io.File; 

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

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

public class Main { 
    public static void main(String[] args) throws Exception { 
    File file = new File("data.xml"); 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = builder.parse(file); 

    NodeList nodes = doc.getElementsByTagName("topic"); 
    for (int i = 0; i < nodes.getLength(); i++) { 
     Element element = (Element) nodes.item(i); 
     NodeList title = element.getElementsByTagName("title"); 
     Element line = (Element) title.item(0); 
     System.out.println("Title: " + getCharacterDataFromElement(line)); 
    } 
    } 
    public static String getCharacterDataFromElement(Element e) { 
    Node child = e.getFirstChild(); 
    if (child instanceof CharacterData) { 
     CharacterData cd = (CharacterData) child; 
     return cd.getData(); 
    } 
    return ""; 
    } 
} 

http://www.java2s.com/Code/Java/XML/GetcharacterdataCDATAfromxmldocument.htm

4

에 대한 해결책을 찾는 데 도움을 주시기 바랍니다 수, 당신은 그 값을 잡기 위해 XPath를 같은 것을 사용할 수 있습니다 : -

try { 
    InputStream is = getClass().getClassLoader().getResourceAsStream("data.xml"); 
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); 
    XPath xPath = XPathFactory.newInstance().newXPath(); 
    String value = xPath.evaluate("//param[@index='0']/value/text()", doc).trim(); 
    System.out.println("Value: " + value); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

... 그리고 네, 과거의 질문에 대한 답변을 수락하고 투표를 고려하십시오. 당신은 당신이 당신의 감사를 보여주기위한 간단한 노력을하지 않는다면 당신을 도우 려하지 않는다는 것을 알게 될 것입니다. :)

2

제 솔루션을 참조하십시오. 더 일반적입니다. 가능한 경우 솔루션이 작동하지 않습니다.

private static String getCharacterDataFromElement(Element e) { 
     String queryText = null; 
     NodeList nl = e.getChildNodes(); 
     for(int i=0; i<nl.getLength();i++){ 
      if(nl.item(i).getNodeType() == Node.CDATA_SECTION_NODE){ 
       queryText = nl.item(i).getNodeValue().trim(); 
       break; 
      } 
     } 
     return queryText; 
    } 

시도는 이러한 경우에 솔루션을 사용 :

<query name="persistRating"> 
<![CDATA[ 
    INSERT INTO scoring_cache (resourcetypeid, resourceid, contentid, sumhitcount) values (?, ?, ?, ?) 
]]> 

당신의

Node child = e.getFirstChild(); 

유형의 텍스트를 반환합니다, CDATA를 입력하지. 그리고 CDATA에서 텍스트를 가져올 수 없습니다.