2012-07-19 20 views
7

XML'de CDATA tpyes ayrıştırmaya çalışıyorum. Kod iyi çalışıyor ve Bağlantılar'ı yazdırıyor: konsolda (yaklaşık 50 kez, çünkü bu kadar çok bağlantı var) ancak bağlantılar görünmeyecek ... sadece boş bir konsol alanı. Ne eksik olabilir ``Java'da CDATA XML Okuma

package Parse; 

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 XMLParse { 
    public static void main(String[] args) throws Exception { 
    File file = new File("c:test/returnfeed.xml"); 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = builder.parse(file); 

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

Sonuç:?

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

Örnek XML: (Not tam belge) yerine birinci çocuğu kontrol etmeyi

<?xml version="1.0" ?> 
<response xmlns:uma="http://websiteremoved.com/" version="1.0"> 

    <timestamp> 
     <![CDATA[ July 18, 2012 5:52:33 PM PDT 
      ]]> 
    </timestamp> 
    <resultsOffset> 
     <![CDATA[ 0 
      ]]> 
    </resultsOffset> 
    <status> 
     <![CDATA[ success 
     ]]> 
    </status> 
    <resultsLimit> 
     <![CDATA[ 207 
     ]]> 
    </resultsLimit> 
    <resultsCount> 
     <![CDATA[ 207 
     ]]> 
    </resultsCount> 
    <videoCollection> 
     <name> 
      <![CDATA[ Video API 
      ]]> 
     </name> 
     <count> 
      <![CDATA[ 207 
      ]]> 
     </count> 
     <description> 
      <![CDATA[ 
      ]]> 
     </description> 
     <videos> 
      <video> 
       <id> 
        <![CDATA[ 8177840 
        ]]> 
       </id> 
       <headline> 
        <![CDATA[ Test1 
        ]]> 
       </headline> 
       <shortHeadline> 
        <![CDATA[ Test2 
        ]]> 
       </shortHeadline> 
       <description> 
        <![CDATA[ Test3 

        ]]> 
       </description> 
       <shortDescription> 
        <![CDATA[ Test4 

        ]]> 
       </shortDescription> 
       <posterImage> 
        <![CDATA[ http://a.com.com/media/motion/2012/0718/los_120718_los_bucher_on_howard.jpg 

        ]]> 
       </posterImage> 
       <videoURL> 
        <![CDATA[ http://com/removed/2012/0718/los_120718_los_bucher_on_howard.mp4 

        ]]> 
       </videoURL> 
      </video> 
     </videos> 
    </videoCollection> 
</response> 
+0

Örnek bir xml sağlayabilir misiniz? veya bunun bir kısmı? – Sujay

+0

XML Eklendi. Http URL’lerinin "videoURL" etiketine ulaşmaya çalışıyorum. – Matt

+0

Sadece bir çocuk düğümün 'Node child = e.getFirstChild();' olduğundan emin misiniz? ? Tüm çocuk düğümlerini alın ve hata ayıklayıcısında inceleyin. –

cevap

12

, bu tedbirli olur düğümün başka çocukları olup olmadığı. Sizin durumunuzda (ve eğer bu düğümde hata ayıkladıysanız, bilecektiniz demektir), düğüm, getCharacterDataFromElement'un çoklu çocuklara sahip olduğu yönteme geçmiştir. Kodu güncelledim ve bu size doğru yöne işaretçileri verebilir:

public static String getCharacterDataFromElement(Element e) { 

    NodeList list = e.getChildNodes(); 
    String data; 

    for(int index = 0; index < list.getLength(); index++){ 
     if(list.item(index) instanceof CharacterData){ 
      CharacterData child = (CharacterData) list.item(index); 
      data = child.getData(); 

      if(data != null && data.trim().length() > 0) 
       return child.getData(); 
     } 
    } 
    return ""; 
} 
+0

Bu işe yaradı. Teşekkürler Sujay! – Matt

+0

yardım etmekten memnun! Eğer yardım ederse cevabı kabul etmeyi düşün lütfen :) – Sujay

+0

en iyisisin –

İlgili konular