lxml добавить неэкранированные объекты в документ - PullRequest
0 голосов
/ 20 марта 2019

Есть ли способ добавить неэкранированный символ новой строки или сделать так, чтобы символ новой строки отображался как 
 без LXML-искажения. XML-документы Excel не учитывают новые строки без отображения при отображении таблиц.

book = Element("Workbook", nsmap=nsmap)
sheet = Element("Worksheet")
sheet.set(SS + "Name", "Test")
table = Element("Table")

row = Element("Row")
cell = Element("Cell")
data = Element("Data")
data.set(SS + "Type", "String")
data.text = "Foo\nBar\nBaz"

cell.append(data)
row.append(cell)
table.append(row)
sheet.append(table)
book.append(sheet)

tostring(book,
         encoding="utf-8",
         method="xml",
         doctype="<?mso-app...?>",
         xml_declaration=True,
         pretty_print=True)

Это выдаст

<?xml version...?>
<?mso-app...?>
<Workbook xmlns="..." ...>
  <Worksheet ss:Name="Test">
    <Table>
      <Row>
        <Cell>
          <Data ss:Type="String">foo
bar
baz</Data>
        </Cell>
  ...
</Workbook>

, который, к сожалению, не отображается должным образом. Excel ожидает увидеть это вместо:

<Data ...>foo&#10;bar&#10;baz</Data>

Я уже пробовал этот ответ , но использование BeautifulSoup либо удаляет атрибуты xmlns (при использовании синтаксического анализатора lxml-xml, как предлагает ответ), либо не сохраняет регистр (при использовании lxml или парсеры html5lib), и Excel очень требователен к использованию элементов titlecase и имен атрибутов.

...