Использование вывода lxml XSLT - PullRequest
0 голосов
/ 16 января 2019

Я использую Python и lxml. Я пытаюсь добавить результат преобразования XML в другой объект XML, что приводит к ошибке неверного типа.

У меня есть два xml-файла, которые я хочу объединить в одном и том же дереве XML, но сначала мне нужно применить XSLT-преобразование к одному из двух файлов. Если я преобразую результат XSLT в строку, а затем проанализирую его, он будет работать, но я бы предпочел пропустить этот шаг и напрямую использовать вывод XSLT.

#Code that works:
xsl = etree.XSLT(etree.parse('Stylesheet.xsl'));
xml = etree.fromstring('<ROOT/>');
xml.append(etree.parse('FileA.xml')));
xml.append(etree.fromstring(str(xsl(etree.parse('FileB.xml')))));
#Code that results in an error:
xsl = etree.XSLT(etree.parse('Stylesheet.xsl'));
xml = etree.fromstring('<ROOT/>');
xml.append(etree.parse('FileA.xml')));
xml.append(xsl(etree.parse('FileB.xml')));

Сообщение об ошибке следующее:

TypeError: Argument 'element' has incorrect type (expected lxml.etree._Element, got lxml.etree._XSLTResultTree)

1 Ответ

0 голосов
/ 17 января 2019

Документация API предполагает, что

 xml.append(xsl(etree.parse('FileB.xml')).getroot());

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

...