无法将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()
。
答
当您尝试加载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
类来实现。
或者只是不要使用DOM。它充满了像这样的可用性问题。诸如JDOM和XOM等现代等价物在各方面均优越。 – 2012-02-09 12:38:30