Lesen CDATA XML in Java
Ich versuche zu analysieren CDATA tpyes in XML. Der code läuft wunderbar und es wird gedruckt, Links: in der Konsole (über 50 mal, weil das ist, wie viele links ich habe), aber die links nicht angezeigt werden...es ist einfach nur eine leere Konsole Platz. Was könnte ich vermissen?`
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 "";
}
}
Ergebnis:
Links:
Links:
Links:
Links:
Links:
Links:
Links:
Beispiel-XML-Code: (Nicht vollständige-Dokument)
<?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>
- könnten Sie ein Beispiel für xml? oder ein Teil davon?
- XML Hinzugefügt. Ich versuche, die http-URL in der "videoURL" - tag.
- Sind Sie sicher, dass Sie nur ein Kind-Knoten 'Node child = e.getFirstChild();' ? Holen Sie sich alle untergeordneten Knoten und kontrollieren Sie Sie im debugger.
- haben Sie überprüft, die xml, die du gepostet hast? Sie haben verpasst, die end-tags. und ich Stimme mit @RafaelOsipov -ich denke, dass es nur ein Kind für jeden Knoten.
- haben Sie versucht, die Lösung, die ich angegeben habe? ich war in der Hoffnung dies würde das Problem behoben 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt Kontrolle das erste Kind, es wäre klug, ob der Knoten die anderen Kinder auch. In deinem Fall (und ich denke, wenn Sie ausgetestet hatte, die Knoten, Sie hätte mir bekannt), wird der Knoten an die Methode übergeben
getCharacterDataFromElement
hatte mehrere Kinder. Ich aktualisierte den code, und dies könnte Ihnen Hinweise auf die richtige Richtung:Ich würde erwägen, getTextContent()