2011-12-13 11 views
7

के लिए एक्सएमएल का विश्लेषण कैसे करें <![CDATA[---]... में एक्सएमएल युक्त डेटा को कैसे पार्स करें हम xml को कैसे पार्स कर सकते हैं और CDATA में डेटा शामिल कर सकते हैं ???<![CDATA[]]>

+0

क्या आप "हाथ से" फ़ाइल को पार्स करते हैं या आप किसी XMLReader क्लास (और कौन) का उपयोग करते हैं? – Thargor

उत्तर

8
public static void main(String[] args) throws Exception { 
    File file = new File("data.xml"); 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
//if you are using this code for blackberry xml parsing 
    builder.setCoalescing(true); 
    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)

+0

मैं कुछ ऐसा करने की बजाय कुछ करता हूं: अगर (बच्चा! = Null && (कैरेक्टरडेटा का बच्चा उदाहरण)) { वापसी ((कैरेक्टरडाटा) बच्चा) .getData(); } अन्य { वापसी e.getNodeValue(); } सीडीएटीए ब्लॉक की उपस्थिति/अनुपस्थिति को सहजता से संभालने के लिए। –

+0

क्या आप कृपया कुछ पाठ प्रदान कर सकते हैं कि आप क्या कर रहे हैं और आप 'DocumentbuilderFactory' का उपयोग क्यों करेंगे? – Gray

+0

वर्तमान जावा डीओएम कार्यान्वयन में आप 'e.getTextContent()' का उपयोग कर टेक्स्ट डेटा के रूप में सीडीएटीए तक पहुंच सकते हैं। [उदाहरण देखें] (http://stackoverflow.com/questions/42802202) बिना प्रकार के चेक, कास्ट, 'e.getData() '। – jschnasse

2

CDATA बस कहता है कि शामिल डेटा से बच नहीं जाना चाहिए। तो, बस टैग टेक्स्ट ले लो। एक्सएमएल पार्सर को CDATA के बिना स्पष्ट डेटा वापस करना चाहिए।

+1

टेक्स्ट डेटा प्राप्त करना: e.getTextContent(); –

0
यहाँ

r.get().getResponseBody() सभी पिछले जवाब एक DOM आधारित दृष्टिकोण का उपयोग कर रहे के बाद से प्रतिक्रिया शरीर

Document doc = getDomElement(r.get().getResponseBody());    
    NodeList nodes = doc.getElementsByTagName("Title"); 
    for (int i = 0; i < nodes.getLength(); i++) { 
    Element element = (Element) nodes.item(i); 
    NodeList title = element.getElementsByTagName("Child tag where cdata present"); 
    Element line = (Element) title.item(0); 
    System.out.println("Title: "+ getCharacterDataFromElement(line)); 


    public static Document getDomElement(String xml) { 
     Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     dbf.setCoalescing(true); 
     dbf.setNamespaceAware(true); 
     try { 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xml)); 
      doc = db.parse(is); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return doc; 
    } 

    public static String getCharacterDataFromElement(Element e) { 
     Node child = e.getFirstChild(); 
     if (child instanceof CharacterData) { 
      CharacterData cd = (CharacterData) child; 
      return cd.getData(); 
     } 
     return ""; 
    } 
1

है। STAX का उपयोग कर स्ट्रीम आधारित दृष्टिकोण के साथ सीडीएटीए को पार्स करने का तरीका है।

उपयोग निम्नलिखित पैटर्न:

switch (EventType) { 
     case XMLStreamConstants.CHARACTERS: 
     case XMLStreamConstants.CDATA: 
      System.out.println(r.getText()); 
      break; 
     default: 
      break; 
     } 

पूरा नमूना:

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.InputStream; 

import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLStreamConstants; 
import javax.xml.stream.XMLStreamReader; 

public void readCDATAFromXMLUsingStax() { 
    String yourSampleFile = "/path/toYour/sample/file.xml"; 
    XMLStreamReader r = null; 
    try (InputStream in = 
      new BufferedInputStream(new FileInputStream(yourSampleFile));) { 
     XMLInputFactory factory = XMLInputFactory.newInstance(); 
     r = factory.createXMLStreamReader(in); 
     while (r.hasNext()) { 
      switch (r.getEventType()) { 
      case XMLStreamConstants.CHARACTERS: 
      case XMLStreamConstants.CDATA: 
       System.out.println(r.getText()); 
       break; 
      default: 
       break; 
      } 
      r.next(); 
     } 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } finally { 
     if (r != null) { 
      try { 
       r.close(); 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } 
     } 
    } 
} 

/path/toYour/sample/file.xml

<data> 
    <![CDATA[ Sat Nov 19 18:50:15 2016 (1672822)]]> 
    <![CDATA[Sat, 19 Nov 2016 18:50:14 -0800 (PST)]]> 
</data> 

साथ देता है:

Sat Nov 19 18:50:15 2016 (1672822)        
Sat, 19 Nov 2016 18:50:14 -0800 (PST)  
संबंधित मुद्दे