无法将xml字符串转换为w3c文档

问题描述:

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

我第一次在各地搜索,并在这里提出了一些很好的例子在stackoverflow。 但不幸的是,我可以让他们工作!

Apperently我的代码不工作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); 

当我做一个系统输出之后这样的:

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

我得到作为输出:

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

我在使用本系统输出了空输出为[频道:空]

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

常量的内容是这样的:

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的子类。在Element的情况下,getNodeValue()总是返回null(请参阅其他子类的行为的Node javadoc中的表)。如果您想调试XML文档,请考虑使用getTextContent()

+1

或者只是不要使用DOM。它充满了像这样的可用性问题。诸如JDOM和XOM等现代等价物在各方面均优越。 – 2012-02-09 12:38:30

当您尝试加载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类来实现。