2012-07-19 30 views
7

私はXMLでCDATA tpyesを解析しようとしています。コードはうまく動いて、リンク:をコンソールに表示します(約50回、リンクがあるため)。リンクは表示されません。空白のコンソールスペースです。 ?私が欠落している可能性があり、 ``JavaでCDATA XMLを読む

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 ""; 
    } 
} 

は結果:

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

Links: 

サンプルXML:(未フルドキュメント)

<?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

サンプルxmlを提供できますか?またはその一部? – Sujay

+0

XMLが追加されました。 「videoURL」タグにhttp URLを取得しようとしています。 – Matt

+0

子ノード「Node child = e.getFirstChild();」を1つだけ使用してもよろしいですか? ?すべての子ノードを取得し、デバッガで検査します。 –

答えて

12

代わりに最初の子をチェックする、それが賢明だろうノードに他の子もあるかどうかあなたの場合(そして、私はあなたがそのノードをデバッグしたかどうかは分かっていると思います)、getCharacterDataFromElementメソッドに渡されたノードは複数の子を持っていました。私はコードを更新し、これはあなたに正しい方向へのポインタを与えるかもしれません:

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

これは働いた。ありがとうSujay! – Matt

+0

お手伝いをしてうれしい!それが助けられたら答えを受け入れることを検討してください: – Sujay

+0

あなたは最高です –