Java Can';t将xml字符串转换为w3c文档

Java Can';t将xml字符串转换为w3c文档,java,xml,string,document,w3c,Java,Xml,String,Document,W3c,我想将包含xml的java字符串转换为W3CDOM文档对象 我首先搜索了所有地方,并在这里找到了一些关于stackoverflow的好例子。 但不幸的是,我可以让他们工作 显然,我的代码没有100%正常工作 它似乎解析字符串,但节点中没有值。 这就是我到目前为止得到的 Document newDoc = null; InputSource is = new InputSource(); is.setCharacterStream(new StringReader(TestFiles.RSS_F

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

我首先搜索了所有地方,并在这里找到了一些关于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));
我作为输出获得:[通道: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>";
public final静态字符串RSS\u FEED\u FILE\u 2=“\n”+
“\n”+
“\n”+
“星期日\n”+
"http://www.google.nl\n“+
“2012-02-05 20:58\n”+
“2012-02-08 09:48\n”+
“blabla\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
"";

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

当您尝试加载RSS XML字符串时,我建议您从中使用RSS XSD。这将帮助您加载RSS字符串,并为您提供更好的方式来编辑数据或将其转换为任何目标(如文件)。不过,这需要JAXB来工作。希望这有帮助。

这是一个很常见的问题。
getNodeValue()的行为取决于的子类。对于
元素
getNodeValue()
始终返回
null
(有关其他子类的行为,请参见
节点
javadoc中的表)

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

使用会花费大量的时间来处理XML,而且它通常是我的第一个调用端口

如果使用jdom是一种选择,那么构建文档就很简单了

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

需要注意的是,这将创建一个org.jdom.Document对象,然后需要将其适应w3c文档。同样,使用
org.jdom.output.domoutputer
类可以很容易地实现这一点。

或者干脆不使用DOM。它充满了这样的可用性陷阱。现代的等价物,如JDOM和XOM,在各个方面都有优势。