【问题标题】:org.w3c.dom.Document xml parsing wrongorg.w3c.dom.Document xml 解析错误
【发布时间】:2013-01-16 04:32:39
【问题描述】:

我正在使用 apache xerces DOMParser 和 org.w3c.dom.Document 来解析 xml 文档。 在尝试查找元素并设置一些文本内容时,没有抛出错误,但是 setNodeValue(String) 方法没有为节点设置任何内容。该节点是一个文本节点。 当我调试时,我看到像 nextSibling 或 firstChild 这样的属性是#text 或\n。 如何删除这些空格和 #text ?以及为什么 setNodeValue() 方法不起作用?

我还有一个问题: 如何获取具有名称空间的文档元素,例如“tns:result”?

在下面的xml中:

<document xmlns:tns="....">
<header>
 <tns:username/>
</header>
</document>

document.getElementsByTagName("tns:username").items(0).setNodeValue("hello");

但是在这样做之后,结果 xml 仍然是一样的。

【问题讨论】:

    标签: xml dom sax xerces


    【解决方案1】:

    当节点类型为ELEMENT_NODE(在您的情况下)时,调用setNodeValue(...) 无效(请参阅Node#setNodeValue(String ...) 的文档。您必须改为创建子文本节点。

    至于您看到的文本节点,它们在文档中。如果您删除它们,您会将所有标签放在一行上。在处理 XML 时,您必须准备好忽略无关紧要的空格。解析器无法为您执行此操作,因为它不知道哪个空格对 无关紧要。

    【讨论】:

    • 我删除了空格,但我仍然得到节点 tns:username 的节点类型 = 1。知道是什么原因吗?
    • 节点类型 1 是ELEMENT_NODE,这是正确的。如果要将&lt;tns:username/&gt; 转换为&lt;tns:username&gt;myUserName&lt;/tns:username&gt;,则必须添加一个子文本节点以包含用户名值。
    猜你喜欢
    • 2018-03-02
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多