我有一个XML文件,需要有一个"TAB"字符作为键的值。基于此链接在XML标记中表示空格和制表符,我将其编码为	,而不是使用"\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 字符存储在变量中但没有显示的真实情况,我将其用作分隔符来连接两个字符串。
这在解释器中工作正常,但在脚本中不起作用,我在 vim 上通过 :set list 选项看到了它的输出
谁能告诉我我采取的方法有什么问题。感谢帮助!
你正在称呼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'