Kodi Community Forum

Full Version: read data from XML file
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello everyone. I am making an addon to read files that are passed in an XML file. XML structure is very simple

Archivo XML
https://paste.kodi.tv/jimavexizo.kodi

The addon.py where the error arises is this:
Code:
# -*- coding: utf-8 -*-
import sys
import xbmcgui
import xbmcplugin
import xbmc
import os
from urlparse import parse_qsl
from io import open
from bs4 import BeautifulSoup as bs

__url__ = sys.argv[0];
addon_handle  =  int ( sys . argv [ 1 ])

contenido =[]
archivo = open("D:\\Kodi_Listado_Completo.xml", mode="r", encoding="utf-8-sig")
lineas= archivo.readlines()
lineas_modificadas=[]
for i in range(len(lineas)):
    lineas.replace("\\ufeff", "")
    lineas_modificadas.append(lineas[i].strip())
contenido = "".join(lineas_modificadas)
documento = bs(contenido, "xml")
del lineas, lineas_modificadas, contenido

The addon.xml is this:[/i]
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.lacibis" name="Lacibis" version="1.0.0" provider-name="julius">
  <requires>
    <import addon="xbmc.python" version="2.26.0"/>
    <import addon="plugin.video.youtube" version="6.7.0"/>
    <import addon="script.module.beautifulsoup4" version="4.6.2"/>    
  </requires>
  <extension point="xbmc.python.pluginsource" library="addon.py">
    <provides>video</provides>
  </extension>
  <extension point="xbmc.addon.metadata">
    <summary>Lacibis</summary>
    <description>Addon de Cine</description>
    <disclaimer></disclaimer>
    <language></language>
    <platform>all</platform>
    <assets>
      <icon>resources/icon.png</icon>
      <fanart>resources/fanart.jpg</fanart>
    </assets>
  </extension>
</addon>

[i]The kodi.log file is as follows[/i]
https://paste.kodi.tv/cezobopojo.kodi


From what I see it is a failure because KODI does not have a parse installed. I have tried to do the same with ElementTree.ettree but it doesn't give problems with script.module.abi dependency too.
I am a novice in this I would appreciate help. I have searched and tried different options but it doesn't work. Thank you
'xml' parser in BeautifulSoup4 uses lxml Python parser library. Since it is a binary library it is not included in Kodi. You can use either ElementTree or DOM parser that are included in Python standard library and do not require external dependencies.

Also this line:
lineas.replace("\\ufeff", "")
in your code does not make sense:
a) you are using an escape-encoded Unicode symbol inside a byte string so it is interpreted literally as a sequence of \, u, f, e, f and f English characters. Use Unicode literals (u'') for such cases.
b) you are opening a file in the text mode with utf-8-sig mode so the UTF-8 BOM byte (\uFEFF) is automatically skipped.
c) BOM is inserted only at the beginning of a file, not at each string, so no need to remove it from each string (which should be done in the the binary reading mode anyway).
My addon parses xml as well. I had used etree with success in the past:

import xml.etree.ElementTree as ET
my_ET = ET.parse(my_file).getroot())

I recently found another pure python script which you can just place in your addon structure and import. Its fast and generates a python dict you can work with directly: xmltodict


from contextlib import closing
from . import xmltodict
import xbmcvfs

with closing(xbmcvfs.File(my_file)) as content_file:
my_dict = xmltodict.parse(bytes(content_file.readBytes()))
One option is to build a target parser which just iterates through the nodes and 'triggers' when it sees a tag you care about.
Extraction of specific data from various website with tools https://mydataprovider.com . Receive the data in a structured CSV, XML or JSON file.