After the conversion, there is a problem with the encoding of attribute values. Standard conversion does not help.
import lxml.etree as ET
data = '<Response> <ОргМн Наим="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ"> <Орг НаимЮЛПолн="НАИМЕНОВАНИЕ 5087"> <ГРНДата ГРН="5087" ДатаЗаписи="2008-11-18"/> </Орг> </ОргМн> </Response>'
rools = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:copy-of select="*" /> </xsl:template> </xsl:stylesheet>'
root = ET.fromstring(data)
xslt = ET.fromstring(rools)
transform = ET.XSLT(xslt)
newdom = transform(root)
result = ET.tostring(newdom, encoding='unicode')
print(result)
<Response>
<ОргМн Наим="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ">
<Орг НаимЮЛПолн="НАИМЕНОВАНИЕ 5087">
<ГРНДата ГРН="5087" ДатаЗаписи="2008-11-18"/>
</Орг>
</ОргМн>
</Response>
Try decode use encoding='unicode'
, but no result.
How to get the following output?
<Response>
<ОргМн Наим="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ">
<Орг НаимЮЛПолн="НАИМЕНОВАНИЕ 5087">
<ГРНДата ГРН="5087" ДатаЗаписи="2008-11-18"/>
</Орг>
</ОргМн>
</Response>
CodePudding user response:
I have now tested with Python 3 and lxml 4.9.1 that using
rools = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="UTF-8"/> <xsl:template match="/"> <xsl:copy-of select="*" /> </xsl:template> </xsl:stylesheet>'
plus then simply
root = ET.fromstring(data)
xslt = ET.fromstring(rools)
transform = ET.XSLT(xslt)
newdom = transform(root)
result = str(newdom)
print(result)
gives the result
<Response> <ОргМн Наим="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ"> <Орг НаимЮЛПолн="НАИМЕНОВАНИЕ 5087"> <ГРНДата ГРН="5087" ДатаЗаписи="2008-11-18"/> </Орг> </ОргМн> </Response>