将XML字符作为字符串读入ElementTree

时间:2016-07-28 14:44:28

标签: python xml csv elementtree

我正在使用ElementTree将CSV文件与XML文档进行比较。如果标记与CSV中的第一个单元格匹配,则脚本应更新标记。当我将XML导入另一个程序(InDesign)时,标记需要有一个不间断的空间来防止文本换行。

XML输入:

<Table_title>fatal crashes by&#160;time of day</Table_title>
<cell>data1</cell>
<cell>data2</cell>
<cell>data3</cell>

CSV输入:

'fatal crashes by&#160;time of day', data1, data2, data3

但是,当我使用ET.parse('file.xml')将XML读入ElementTree脚本时,它似乎会使角色成为一个不间断的空间:

<Table_title>fatal crashes by time of day</Table_title>
<cell>data1</cell>
<cell>data2</cell>
<cell>data3</cell>

这正是应该做的(我认为)。但在这种情况下,我实际上希望&#160;呈现为字符串,以便它与CSV的第一个单元格匹配(因为在读入CSV时,它会将其解释为字符串:'fatal crashes by&#160;time of day' )。

有办法:

  1. 强制XML脚本将不间断空格读取为字符串而不是转义字符:<Table_title>fatal crashes by&#160;time of day</Table_title>
    1. 强制XML脚本读取CSV并将字符渲染为转义字符而不是字符串:'fatal crashes by time of day', data1, data2, data3

1 个答案:

答案 0 :(得分:1)

以下是发生的事情。

您将此XML读入ElementTree:

<Table_title>fatal crashes by&#160;time of day</Table_title>

ElementTree解析它并将其转换为这个DOM:

  • 元素节点,名称Table_title
    • 文本节点,字符串值:"fatal crashes by・time of day"(其中表示代码为160的字符,即不间断空格)

这是100%正确的,你不能(也不应该)对此做任何事情。

您的CSV 似乎在其第一列中包含一小段XML。但是,在解析它之前,它仍然是未解析的。

如果您希望能够比较文本值,则别无选择,只能对第一列进行XML解析。

import csv
import xml.etree.ElementTree as ET

# open your XML and CSV files...

for row in csv_reader:
    temp = ET.fromstring('<temp>' + row[0] + '</temp>')
    print(temp.text)

    # compare temp.text to your XML