gpt4 book ai didi

python - 当 XML 包含特殊字符时,使用 Python minidom 解析 XML

转载 作者:行者123 更新时间:2023-11-30 23:33:13 25 4
gpt4 key购买 nike

我有一个 XML 文件,需要将“TAB”字符作为键的值。基于此链接Represent space and tab in XML tag我将其编码为 而不是使用“\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>&#009;</value>
</key>
<key>
<name>key3</name>
<value>2048</value>
</key>
</keys>

这是我现在无法处理此制表符的代码

...
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

但另一个奇怪的事情是,当我在解释器上说 node 时,它​​正在打印 '\t' !!

node
u'\t'

为了查看这是否是制表符存储在变量中但未显示的真实情况,我将其用作分隔符来连接两个字符串。

这在解释器中工作得很好,但在我通过 :set list 选项在 vim 上看到的脚本中却不起作用

谁能告诉我我所采取的方法有什么问题。感谢帮助!

最佳答案

您正在调用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'

关于python - 当 XML 包含特殊字符时,使用 Python minidom 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com