使用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里面没有嵌套内容,你有什么理由需要预期的结果而不是你得到的结果? ( 的意思完全相同,只是更简洁) 我得到 但输出需要 你是什么意思“但输出需要”什么需要它是这种格式?我无法想象任何验证都会失败。 对于上面的代码我得到输出 观察 节点它不正确。在 节点 node 应该来关闭节点,我需要它。 &lt;welcome/&gt;&lt;welcome&gt;&lt;/welcome&gt; 与 XML 解析器完全相同。参见XML Scpecification: 3.1 Start-Tags, End-Tags, and Empty-Element Tags:“[定义:没有内容的元素被称为空元素。] 空元素的表示形式是一个开始标签紧跟一个结束标签,或者一个空元素标签。[定义: 空元素标记采用特殊形式:[44] EmptyElemTag ::= ''" 【参考方案1】:

获取输出:

<root>    
    <hai>
        <welcome>
        </welcome>
    </hai>
</root>

如果&lt;welcome&gt; &lt;/welcome&gt; 元素实际上不为空但至少包含一个空格字符,则需要创建一个文本节点并将其添加为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得到意外结果?的主要内容,如果未能解决你的问题,请参考以下文章

保存前向 XML 添加节点

使用 T-SQL 查询 XML 节点得到错误的结果集

如何使用mongodb获得节点Api的结果

使用 Jackson 将 XML 属性添加到手动构建的节点树

XSLT:使用输入 XML 中的唯一且已排序的日期创建新的 XML 节点

将节点添加到XML变量并保存