2015-01-30 2 views
0

Я хочу использовать ElementMaker в lxml для создания XML-представления таблицы Excel с соответствующей вложенностью. Я хотел быНесколько элементов в ElementMaker в lxml python

<excelbook> 
    workbook info 
    <excelsheet> 
     <sheetname>Sheet1</sheetname> 
     <exceltable> 
     <numrows>10</numrows> 
     <numcols>13</numcols> 
     </exceltable> 
     <exceltable> 
     <numrows>10</numrows> 
     <numcols>13</numcols> 
     </exceltable> 
    </excelsheet> 
    <excelsheet> 
     <sheetname>Sheet2</sheetname> 
     <exceltable> 
     <numrows>10</numrows> 
     <numcols>13</numcols> 
     </exceltable> 
     <exceltable> 
     <numrows>10</numrows> 
     <numcols>13</numcols> 
     </exceltable> 
    </excelsheet> 
</excelbook> 

Мой питон код выглядит следующим образом

for excelSheet in excelBook.excelSheets: 

     for excelTable in excelSheet.excelTables: 

      exceltable = E.exceltable(
       E.num_rows(str(excelTable.num_rows)), 
       E.num_cols(str(excelTable.num_cols)), 
       ) 

     excelsheet = E.excelsheet(
       exceltable, 
       E.sheetname(excelSheet.sheetName), 
       ) 

     excelbook = E.excelbook(
     excelsheet, 
     E.bookname(fullpathname), 
     E.numSheets(str(excelBook.numSheets))) 

     root = E.XML(excelbook) 

Проблема в том, что я могу только гнездо один лист внутри каждой книги и одна таблица внутри каждого листа. Как изменить код, чтобы разрешить несколько листов в каждой книге и несколько таблиц внутри каждого листа.

ответ

0

Вы не можете добавить тег с тем же самым именем тега дважды под одним и тем же корнем и ожидать, что они будут добавляться один за другим, а не второй, переопределяя первый, потому что это не очень согласовано. Например, если у вас есть:

<root> 
    <elem1>some text 1</elem1> 
</root> 

Если вы пытаетесь добавить еще один «elem1» тег корня, она перекрывает существующий. Я бы предложил использовать индексирование («elem_0», «elem_1», «elem_2» и т. Д.).

Смежные вопросы