使用java将节点添加到xml得到意外结果?
Posted
技术标签:
【中文标题】使用java将节点添加到xml得到意外结果?【英文标题】:Adding node to xml using java getting unexpected result? 【发布时间】:2014-05-21 00:01:17 【问题描述】:这是我的 demo.jsp 页面
String filename = "TestNode.xml";
ServletContext app = getServletContext();
String projectPath = app.getRealPath("/");
String result = projectPath + filename;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File(result)));
Element rootElement = doc.getDocumentElement();
Element element1 = doc.getDocumentElement();
Element element2 = doc.createElement("hai");
rootElement.appendChild(element2);
Element name = doc.createElement("welcome");
element2.appendChild(name);
element1.appendChild(element2);
DOMSource src = new DOMSource(doc);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = null;
transformer = transformerFactory.newTransformer();
StreamResult rslt = new StreamResult(result);
transformer.transform(src, rslt);
为此,我得到的输出为:
<root>
<hai>
<welcome/>
</hai>
</root>
但预期的输出是:
<root>
<hai>
<welcome>
</welcome>
</hai>
</root>
我应该在哪里更改代码以获得预期的结果?
【问题讨论】:
它实际上意味着完全相同的东西,它正在整理,因为welcome里面没有嵌套内容,你有什么理由需要预期的结果而不是你得到的结果? (<welcome/>
和 <welcome></welcome>
与 XML 解析器完全相同。参见XML Scpecification: 3.1 Start-Tags, End-Tags, and Empty-Element Tags:“[定义:没有内容的元素被称为空元素。] 空元素的表示形式是一个开始标签紧跟一个结束标签,或者一个空元素标签。[定义: 空元素标记采用特殊形式:[44] EmptyElemTag ::= ''"
【参考方案1】:
获取输出:
<root>
<hai>
<welcome>
</welcome>
</hai>
</root>
如果<welcome> </welcome>
元素实际上不为空但至少包含一个空格字符,则需要创建一个文本节点并将其添加为welcome
元素的子元素:
Element name = doc.createElement("welcome");
Node textNode = doc.createTextNode(" ");
name.appendChild(textNode);
element2.appendChild(name);
【讨论】:
如果可能的话,请把它和我上面的代码整合起来 我只是在中间添加了两行。第一行和最后一行来自您的代码。您甚至可以在 one 行中执行此操作:name.appendChild(doc.createTextNode(" "));
。只需将其放在 your 代码中的 Element name = doc.createElement("welcome");
之后即可。以上是关于使用java将节点添加到xml得到意外结果?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jackson 将 XML 属性添加到手动构建的节点树