当XML有特殊字符时使用Python minidom进行XML解析

2024-10-05 14:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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>&#009;</value>                                                                    
    </key>
    <key>
        <name>key3</name>
        <value>2048</value>
    </key>
</keys>

这是我现在有代码,不能处理这个制表符

^{pr2}$

执行脚本后得到的输出是

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

为了查看这是否是一个真正的情况,制表符被存储在变量中,但没有显示出来,我使用它作为分隔符连接两个字符串。在

这在解释器中工作得很好,但在脚本中却不行,我通过:setlist选项在vim上看到了这个脚本的输出

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


Tags: 文件key字符串name脚本nodevaluexml
1条回答
网友
1楼 · 发布于 2024-10-05 14:26:33

您正在呼叫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'

相关问题 更多 >