将String转换为w3c.dom.Element:XMLParseException:期望的根元素的开始

时间:2011-05-06 10:50:31

标签: java xml

我从博客中找到了以下代码,在运行时我得到了异常

  

XMLParseException:期望开始的根元素。在第9行。

任何人都可以解释为什么我会得到Exception并建议将String转换为元素的其他方法吗?

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 个答案:

答案 0 :(得分:1)

如评论中所述,“Hello DOM Parser”不是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

要回答您的问题,要将String转换为w3c元素,您可以使用createElement;

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

这导致;

<hello>Hello DOM Parser</hello>

答案 1 :(得分:1)

要创建带有自定义标记的DOM Element(我假设它是您想要的,但无法确定),您可以使用以下方法:

String customTag = "HelloDOMParser";

Document doc = documentBuilder.newDocument();       

String fullName = nameSpacePrefix + ":" + customTag;

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

doc.appendChild(customElement);

我假设你知道命名空间URI和你的前缀(如果有的话)。如果您不使用名称空间,请改用createElement()方法。

答案 2 :(得分:0)

DocumentBuilder的parse方法接受包含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