Reading CDATA XML in Java

I am trying to parse CDATA tpyes in XML. The code works fine, and it will print the links: in the console (about 50 times, because I have so many links), but the links won't appear ... it's just an empty console space. What can I lose? `

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

Result:

 Links: Links: Links: Links: Links: Links: Links: 

XML example: (not a complete document)

 <?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> 
+7
source share
1 answer

Instead of checking the first child, it would be wise to see if the node has other children. In your case (and, I think, if you were debugging this node, you would know), the node passed to the getCharacterDataFromElement method had several children. I updated the code and this can give you pointers in the right direction:

 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 ""; } 
+12
source

All Articles