我从博客中找到了以下代码,在运行时我得到了异常
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();
答案 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解析的更多信息。