我有一个XML文件,需要将“TAB”字符作为键的值。基于此链接Represent space and tab in XML tag我将其编码为&#009而不是使用“\ t”,因为它将其解释为包含两个字符'\'和't'的字符串。
我没有使用CDATA部分,因为它仍会将TAB视为包含两个字符'\'和't'的字符串
我的用例的示例XML文件看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<keys>
<key>
<name>key1</name>
<value>value1</value>
</key>
<key>
<name>key2</name>
<value>	</value>
</key>
<key>
<name>key3</name>
<value>2048</value>
</key>
</keys>
这是我现在无法处理此TAB字符的代码
...
dom_obj = minidom.parse(self.path_to_xml)
...
for each_key_child in key_child:
if each_key_child.nodeType == Node.ELEMENT_NODE:
if each_key_child.nodeName == 'name':
node_name = str(each_key_child.childNodes[0].data.strip())
elif each_key_child.nodeName == 'value':
node_value = str(each_key_child.childNodes[0].data.strip())
else:
pass
else:
pass
执行脚本后得到的输出是
'key1': 'value1',
'key2': '',
'key3': '2048',
但是当我在Python交互式解释器上执行它时
mobj = minidom.parse(path_to_xml_file)
mobj.getElementsByTagName("value")[1].childNodes[0]
我得到以下输出
<DOM Text node "u'\t'">
但是我无法将输出分配给变量。此步骤无效
node = mobj.getElementsByTagName("value")[1].childNodes[0].data
但另一个奇怪的事情是,当我在解释器上说节点时,它正在打印'\ t'!!
node
u'\t'
要查看这是否是TAB字符存储在变量中但未显示的真实情况,我将其用作连接器以连接两个字符串。
这在解释器上运行正常,但在脚本中我没有通过:set list选项在vim上看到的输出
有谁能告诉我这种方法有什么问题。帮助赞赏!
答案 0 :(得分:3)
您正在呼叫strip()
。这剥离标签。只是不要这样做。 (或者,如果您需要删除空格或换行符或特定内容,但留下标签,请使用特定参数调用它,例如strip('\n')
。)
这是一个演示(伪造,因为你的示例XML无效,所以我无法测试它):
>>> mobj.getElementsByTagName("value")[1].childNodes[0]
<DOM Text node "u'\t'">
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data
u'\t'
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data.strip()
u''
>>> mobj.getElementsByTagName("value")[1].childNodes[0].data.strip('\n')
u'\t'