在Java中读取CDATA XML
我正在尝试用XML解析CDATA tpyes。代码运行良好,它将打印链接:在控制台中(大约50次,因为我有多少个链接),但链接不会出现…只是控制台的空白空间。我会错过什么在Java中读取CDATA XML,java,xml,parsing,Java,Xml,Parsing,我正在尝试用XML解析CDATA tpyes。代码运行良好,它将打印链接:在控制台中(大约50次,因为我有多少个链接),但链接不会出现…只是控制台的空白空间。我会错过什么 package Parse; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.CharacterData; i
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 "";
}
}
示例XML:(不是完整文档)
不要检查第一个子节点,而是要注意节点是否还有其他子节点。在您的情况下(我想如果您调试了该节点,您就会知道),传递给方法
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 "";
}
公共静态字符串getCharacterDataFromElement(元素e){
NodeList list=e.getChildNodes();
字符串数据;
对于(int index=0;index0)
返回child.getData();
}
}
返回“”;
}
<代码> > p>我将考虑使用GETTrExcTeCon())
您能提供一个示例xml吗?还是其中的一部分?添加了XML。我正在尝试获取“videoURL”标记中的http URL。是否确实只有一个子节点“node child=e.getFirstChild();”?获取所有子节点并在调试器中检查它们。是否检查了发布的xml?你错过了结尾标签。我同意@RafaelOsipov——我认为每个节点只有一个子节点。你试过我提供的解决方案吗?我希望这能解决你的问题:)很乐意帮忙!如果有帮助的话,请考虑接受这个答案:在DoCuffBudioDeWorkFrand调用StEnguleSeCuin(True)将确保没有为空白创建的单独DOM节点,如所描述的。该解决方案不需要使用任何CAST,也不需要调用任何特定的方法。
<?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>
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 "";
}
String string = cdataNode.getTextContent();