2011-05-06 70 views
1

我發現下面的代碼從一個博客,在運行它時我得到一個異常將字符串轉換爲w3c.dom.Element:XMLParseException:根元素開始預期

XMLParseException:根元素的開始預期。在第9行。

任何人都可以解釋爲什麼我得到異常,並建議任何其他方式將字符串轉換爲元素?

String s = "Hello DOM Parser"; 
java.io.InputStream sbis = new java.io.StringBufferInputStream(s); 
javax.xml.parsers.DocumentBuilderFactory b = javax.xml.parsers.DocumentBuilderFactory.newInstance(); 
b.setNamespaceAware(false); 
org.w3c.dom.Document doc = null; 
javax.xml.parsers.DocumentBuilder db = null; 
db = b.newDocumentBuilder(); 
doc = db.parse(sbis);  

org.w3c.dom.Element e = doc.getDocumentElement(); 
+3

「你好DOM解析器」不是XML。 – skaffman 2011-05-06 10:52:46

+0

@skaffman - 有一個機會,即原始文本*包含*元素標籤,但通過在Web應用程序之間複製/粘貼文本的過程已經消除了這些標籤......但無論如何,我可以看到原始文章,在'String s'聲明中不包含標籤元素。 – 2011-05-06 11:03:07

+0

@Abhishek,我假設你已經基於代碼片段引發了我的博客帖子,並拋出了異常,因爲字符串實際上並不是xml元素的表示形式。看到這些後,我更新了[我的博客文章](http://ddweerasiri.blogspot.com/2009/03/how-to-convert-javalangstring-to.html),以避免任何複雜情況。 – 2012-04-12 13:27:51

回答

0

就像在評論中說的,「你好DOM解析器」不是一個XML元素。所以解析器不知道如何處理它。我不知道你正在構建什麼樣的文檔,但是如果你想要HTML,你可以將文本嵌入到html標籤中;

<div>Hello DOM Parser</div> 
<span>Hello DOM Parser</span> 

如果您正在構建XML,您可以將文本嵌入到任何隨機的html標籤中;

<mytag>Hello DOM Parser</mytag> 

有關DOM的一些說明; http://www.w3.org/DOM

要回答你的問題,要將字符串轉換爲w3c元素,可以使用createElement;

Element hello = document.createElement("hello");   
hello.appendChild(document.createTextNode("Hello DOM Parser")); 

這導致;

<hello>Hello DOM Parser</hello> 
+2

是的,你是對的。但議程是如何將字符串轉換爲元素 – Pedantic 2011-05-06 11:43:32

+0

*編輯答案 – Thys 2011-05-06 13:28:47

0

DocumentBuilder的解析方法接受包含xml內容的輸入流。以下更改將適用於您:

String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root><elem1>Java</elem1></root>"; 

儘量避免使用不建議使用的類,如StringBufferInputStream。您可以參考下面的文檔來了解更多關於Java XML解析的信息。

http://www.java-samples.com/showtutorial.php?tutorialid=152

0

要創建一個DOM Element使用自定義標籤(我以爲是你想要的,但不能肯定),你可以用下面的辦法:

String customTag = "HelloDOMParser"; 

Document doc = documentBuilder.newDocument();  

String fullName = nameSpacePrefix + ":" + customTag; 

Element customElement = document.createElementNS(namespaceUri, fullName); 

doc.appendChild(customElement); 

我假設你知道命名空間URI和你的前綴(如果有的話)。如果您不使用名稱空間,請改爲使用createElement()方法。