Home > Blockchain >  How to decode attribute cirrilic values use 'lxml xslt encode' from xml doc?
How to decode attribute cirrilic values use 'lxml xslt encode' from xml doc?

Time:11-09

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>
   <ОргМн Наим="&#x41E;&#x411;&#x429;&#x415;&#x421;&#x422;&#x412;&#x41E; &#x421; &#x41E;&#x413;&#x420;&#x410;&#x41D;&#x418;&#x427;&#x415;&#x41D;&#x41D;&#x41E;&#x419; &#x41E;&#x422;&#x412;&#x415;&#x422;&#x421;&#x422;&#x412;&#x415;&#x41D;&#x41D;&#x41E;&#x421;&#x422;&#x42C;&#x42E;"> 
      <Орг НаимЮЛПолн="&#x41D;&#x410;&#x418;&#x41C;&#x415;&#x41D;&#x41E;&#x412;&#x410;&#x41D;&#x418;&#x415; 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>
  • Related