Это, вероятно, потому, что результатом вашего преобразования является не правильно сформированный XML (потому что у вас нет одного корневого элемента; у вас есть два div
элемента).
Передача неправильно сформированного XML в tostring()
, который ожидает элемент (единственное число) или дерево, кажется, является причиной того, что вы видите только первый элемент результата.
Если вы переносите div
s в одном элементе (например, test
), вы увидите как div
s ...
from lxml import etree
xroot = etree.XML(b'''<?xml version="1.0" encoding="utf-8"?>
<xml>
<name>donald</name>
<surname>trump</surname>
</xml>
''')
xml = etree.ElementTree(xroot)
xslt_root = etree.XML('''
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="xml">
<test>
<div id='name'><xsl:value-of select="name" /></div>
<div id='surname'><xsl:value-of select="surname" /></div>
</test>
</xsl:template>
</xsl:stylesheet>''')
transform = etree.XSLT(xslt_root)
html = etree.tostring(transform(xml)).decode('utf-8')
print(html)
Вывод на печать ...
<test><div id="name">donald</div><div id="surname">trump</div></test>
Просто распечатайтерезультат преобразования (print(transform(xml))
) также показывает оба значения div
s (без изменений в XSLT).