【问题标题】:Read XML characters as strings into ElementTree将 XML 字符作为字符串读入 ElementTree
【发布时间】:2016-12-03 01:01:33
【问题描述】:

我正在使用 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>

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

有没有办法:

  1. 强制 XML 脚本将不间断空格作为字符串而不是转义字符读取:&lt;Table_title&gt;fatal crashes by&amp;#160;time of day&lt;/Table_title&gt;

  1. 强制 XML 脚本读取 CSV 并将字符呈现为转义字符而不是字符串:'fatal crashes by time of day', data1, data2, data3

【问题讨论】:

    标签: python xml csv elementtree


    【解决方案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 的 sn-p。但是,在您对其进行解析之前,它仍处于未解析状态。

    如果您希望能够比较文本值,您别无选择,只能对第一列进行 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 
    

    【讨论】:

    • 这适用于连字符和破折号。但我也想包括空格和不间断空格。但是 ElementTree 只是读取它们,将它们解释为空格,然后将它们写为空格而不是  或 。我明白这就是它应该做的,但我需要在输出中将这些实体作为字符串维护......
    • 不,ElementTree 不进行任何转换,也不进行任何“解释”。 DOM 中的字符串不包含空格(字符代码 32),它包含实际的 NBSP 字符(字符代码 160)。它们在打印到屏幕上时看起来是一样的。
    猜你喜欢
    • 2016-02-22
    • 2015-02-02
    • 2011-09-06
    • 1970-01-01
    • 2013-02-24
    • 2020-08-04
    • 2019-04-14
    • 2016-04-05
    • 2010-10-13
    相关资源
    最近更新 更多