我对minidom解析器处理空元素感到困惑,如下代码部分所示。
import xml.dom.minidom
doc = xml.dom.minidom.parseString('<value></value>')
print doc.firstChild.nodeValue.__repr__()
# Out: None
print doc.firstChild.toxml()
# Out: <value/>
doc = xml.dom.minidom.Document()
v = doc.appendChild(doc.createElement('value'))
v.appendChild(doc.createTextNode(''))
print v.firstChild.nodeValue.__repr__()
# Out: ''
print doc.firstChild.toxml()
# Out: <value></value>
我怎样才能得到一致的行为?我想接收空字符串作为空元素的值(这首先是我放在XML结构中的值)。
打开xml.dom.minidom并搜索“/>;”,我们发现:
我们可以由此推断,只有当childNodes是空列表时,才会出现短结束标记形式。事实上,这似乎是真的:
正如Lloyd所指出的,XML规范没有对两者进行区分。如果您的代码确实进行了区分,那意味着您需要重新考虑如何序列化数据。
minidom只是显示了一些不同的东西,因为它更容易编码。但是,您可以获得一致的输出。只需继承
Element
类并重写toxml
方法,以便在没有具有非空文本内容的子节点时打印出短结束标记表单。然后monkeypatch模块使用您的新元素类。Xml规范没有区分这两种情况。
相关问题 更多 >
编程相关推荐