繁体   English   中英

无法将xml字符串转换为w3c doc

[英]Can't convert xml string to w3c doc

我想将包含xml的java字符串转换为w3c dom文档对象。

我首先搜遍了整个地方,并在stackoverflow上找到了一些很好的例子。 但遗憾的是我可以让他们工作!

显然我的代码无法100%工作。

它似乎解析了字符串,但节点中没有值。 这是我到目前为止所得到的!

Document newDoc = null;

InputSource is = new InputSource();
is.setCharacterStream(new StringReader(TestFiles.RSS_FEED_FILE_2));

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = null;
builder = factory.newDocumentBuilder();
newDoc = builder.parse(is);

当我之后做这样的sysout时:

System.out.println(newDoc.getDocumentElement().getElementsByTagName("channel").item(0)
.getNodeValue());

使用此sysout时,我输出为null:

System.out.println(newDoc.getDocumentElement().getElementsByTagName("channel").item(0));

我得到的输出:[channel:null]

所以我有一个对象,否则会抛出一些空指针异常,但它不包含任何值?!

常量的内容是这样的:

public final static String RSS_FEED_FILE_2 =    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
                                            "<rss version=\"2.0\">\n" + 
                                            "<channel>\n" + 
                                            "<title>sunday</title>\n" + 
                                            "<link>http://www.google.nl</link>\n" + 
                                            "<pubDate>2012-02-05 20:58</pubDate>\n" + 
                                            "<lastBuildDate>2012-02-08 09:48</lastBuildDate>\n" + 
                                            "<description>blabla </description>\n" + 
                                            "<item>\n" + 
                                            "<title><![CDATA[title]]></title>\n" + 
                                            "<link><![CDATA[http://www.google.nl]]></link>\n" + 
                                            "<guid><![CDATA[2266610]]></guid>\n" + 
                                            "<source><![CDATA[sunday]]></source>\n" + 
                                            "<author><![CDATA[me]]></author>\n" + 
                                            "<description><![CDATA[blalbalavblabllllll!]]></description>\n" + 
                                            "</item>\n" + 
                                            "</channel>\n" + 
                                            "</rss>";

有人有解决方案或暗示吗?

这是一个非常普遍的问题。 getNodeValue()的行为取决于Node的子类。 对于ElementgetNodeValue()始终返回null (有关其他子类的行为,请参见Node javadoc中的表)。

如果要调试XML文档,请考虑使用getTextContent()

当您尝试加载RSS XML字符串时,我建议您使用http://www.thearchitect.co.uk/schemas/rss-2_0.xsd中的 RSS XSD。 这将帮助您加载RSS字符串,并为您提供更好的方法来编辑数据或将其转换为任何目标,如文件。 这需要JAXB才能工作。 希望这可以帮助。

使用jdom会花费很多时间处理XML,这通常是我的第一站电话。

如果使用jdom是一个选项,那么构建文档是微不足道的。

SAXBuilder builder = new SAXBuiler();
Document doc = builder.build(new StringReader(YOUR_XML_STRING));

需要注意的是,这会创建一个org.jdom.Document对象,然后您需要将其调整为w3c文档。 同样,使用org.jdom.output.DOMOutputter类很容易实现这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM