Синтаксический анализ таблицы XML не сохраняет исходный файл - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь программно работать с настольным файлом Tableau (который является просто XML-файлом, несмотря на расширение .twb). У меня много проблем с lxml, который не сохраняет оригинальный контент. Чтобы облегчить объяснение, представьте, что у вас есть файл test.xml, который содержит следующий текст:

  <column caption='Choix Découpage'   name='[Aujourd&apos;Hui Parameter (copy 2)]'>
    <member name='Nb d&apos;annulations'  default-format='n#,##0.00&quot; annulations&quot;;-#,##0.00&quot; annulations&quot;' />
        <run>&#10;:</run>
    <calculation  formula='iif([FAC_TYPE] = &apos;Avoir&apos; , [Calculation_1378101492427309057], null)' />
    <alias key='&quot;Billetterie Ferroviaire&quot;' value='Train ticketing' />
  </column>

Теперь давайте разберем его:

tree = etree.parse('test.xml')
root = tree.getroot()
print(etree.tostring(root,pretty_print=True,).decode("utf-8"))

Когда вы запускаете код, мы можем заметить:

  • ' становится "
  • é становится &#233; Редактировать: разрешено для этой части
  • &apos; становится '

Как сохранить оригинал? (Это мне очень поможет, когда я попытаюсь проверить diff с помощью git, несмотря на то, что я показываю все бесполезные изменения, которые выполняются автоматически)

Edit : я замечаю другую проблему, когдая запускаю следующий код:

[node.attrib['key'] for node in root.xpath("//alias")]

Я получил результат: ['"Billetterie Ferroviaire"'], и теперь я не могу запросить с помощью xpath, если я ищу узел, атрибут "ключ" которого является исходным &quot;Billetterie Ferroviaire&quot;(root.xpath('//[@key="Billetterie Ferroviaire"]) не работает)

...