我正在使用ElementTree将CSV文件与XML文档进行比较。如果标记与CSV中的第一个单元格匹配,则脚本应更新标记。当我将XML导入另一个程序(InDesign)时,标记需要有一个不间断的空间来防止文本换行。
XML输入:
<Table_title>fatal crashes by time of day</Table_title>
<cell>data1</cell>
<cell>data2</cell>
<cell>data3</cell>
CSV输入:
'fatal crashes by 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>
这正是应该做的(我认为)。但在这种情况下,我实际上希望 
呈现为字符串,以便它与CSV的第一个单元格匹配(因为在读入CSV时,它会将其解释为字符串:'fatal crashes by time of day'
)。
有办法:
<Table_title>fatal crashes by time of day</Table_title>
或
'fatal crashes by time of day', data1, data2, data3
答案 0 :(得分:1)
以下是发生的事情。
您将此XML读入ElementTree:
<Table_title>fatal crashes by 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