2012-02-09 91 views
1

我想將包含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>"; 

沒有任何人有一個解決方案或提示嗎?

回答

2

這是一個相當普遍的問題。 getNodeValue()的行爲取決於Node的子類。在Element的情況下,getNodeValue()總是返回null(請參閱其他子類的行爲的Node javadoc中的表)。如果您想調試XML文檔,請考慮使用getTextContent()

+1

或者只是不要使用DOM。它充滿了像這樣的可用性問題。諸如JDOM和XOM等現代等價物在各方面均優越。 – 2012-02-09 12:38:30

1

當您嘗試加載RSS XML字符串時,我建議您使用http://www.thearchitect.co.uk/schemas/rss-2_0.xsd中的RSS XSD。這將幫助您加載RSS字符串,併爲您提供編輯數據或將其轉換爲文件等任何目的地的更好方法。這需要JAXB才能工作。希望這可以幫助。

0

使用jdom需要處理XML的很多痛苦,它通常是我的第一個通話端口。

如果使用jdom是一個選項,那麼構建文檔是微不足道的。

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

要小心的是,這將創建一個org.jdom.Document中對象,然後需要在適應W3C文檔。再次,這很容易通過org.jdom.output.DOMOutputter類來實現。