2014-01-09 3 views
-1

Я хотел бы получить вашу помощь в моем сценарии .py.xml парсер в python для xbmc

Я использую файл xml для хранения пути анализатора для изображений.

Вот файл XML, который я использую:

<?xml version="1.0" encoding="utf-8"?> 
<window type="dialog"> 
    <allowoverlay>no</allowoverlay> 
<coordinates> 
<system>1</system> 
<posx>0</posx> 
<posy>0</posy> 
</coordinates> 

<controls> 
    <control type="image" id="1"> 
     <posx>0</posx> 
     <posy>0</posy> 
     <width>1280</width> 
     <height>720</height> 
     <texture>background-defeat.png</texture> 
     <animation effect="fade" start="0" end="100" time="6500">WindowOpen</animation> 
    </control> 

    <control type="image" id="2"> 
     <description>Image 2</description> 
     <posx>307</posx> 
     <posy>7</posy> 
     <width>154</width> 
     <height>95</height> 
     <visible>true</visible> 
     <texture>Image 2.png</texture> 
     <animation effect="fade" start="0" end="100" time="1500">WindowOpen</animation> 
    </control>  

    <control type="image" id="3"> 
     <description>Image 3</description> 
     <posx>460</posx> 
     <posy>7</posy> 
     <width>188</width> 
     <height>95</height> 
     <visible>true</visible> 
     <texture>Image 3.jpg</texture> 
     <animation effect="fade" start="0" end="100" time="1500">WindowOpen</animation> 
    </control> 

    <control type="image" id="4"> 
     <description>Image 4</description> 
     <posx>648.5</posx> 
     <posy>7</posy> 
     <width>165</width> 
     <height>95</height> 
     <visible>true</visible> 
     <texture>recorded_blue.jpg</texture> 
     <animation effect="fade" start="0" end="100" time="1500">WindowOpen</animation> 
    </control> 

    <control type="image" id="5"> 
     <description>Image 5</description> 
     <posx>813.5</posx> 
     <posy>7</posy> 
     <width>149</width> 
     <height>95</height> 
     <visible>true</visible> 
     <texture>Image 5.jpg</texture> 
     <animation effect="fade" start="0" end="100" time="1500">WindowOpen</animation> 
    </control> 
</controls> 
</window> 

Вот .py скрипт:

import xbmc 
import xbmcgui 
import os 

#get actioncodes from keymap.xml 
ACTION_MOVE_LEFT = 1 
ACTION_MOVE_RIGHT = 2 
ACTION_MOVE_UP = 3 
ACTION_MOVE_DOWN = 4 
ACTION_PREVIOUS_MENU = 10 
ACTION_BACKSPACE = 110 



class MyClass(xbmcgui.WindowXML): 
    def onAction(self, action): 

    if action == ACTION_BACKSPACE: 
     self.close() 

    if action == ACTION_PREVIOUS_MENU: 
     self.close() 

    if action == ACTION_MOVE_LEFT: 

     if os.path.exists('Q:\\resources\skins\Default\media\image 4.jpg') == True: 
      self.strAction = xbmcgui.ControlLabel(300, 200, 600, 200, '', 'font14', '0xFF00FF00') 
      self.addControl(self.strAction) 
      self.strAction.setLabel('Image is exist') 

Вот XML Parser:

import xml.etree.ElementTree as ET 

filename = 'script-tvguide-mainmenu.xml' 
tree = ET.parse(filename) 
root = tree.getroot() 
controls = root.find('controls') 

for control in controls.findall('control'): 
    #how do you create the if statement to check for the image through on xml if they are exist? 
    # Here are the image filenames, focus and nofocus. 
    focus = control.find('texturefocus').text 
    nofocus = control.find('texturenofocus').text 
    print('texturefocus={0}, texturenofocus={1}'.format(focus, nofocus)) 

Я попытался с:

if action == ACTION_MOVE_LEFT: 
     filename = 'script-tvguide-mainmenu.xml' 
     tree = ET.parse(filename) 
     root = tree.getroot() 
     controls = root.find('controls') 

     for control in controls.findall('control'): 
      texture = control.find('texture').text 

      if texture == 'tvguide_yellow.png': 
        self.strAction = xbmcgui.ControlLabel(300, 200, 600, 200, '', 'font14', '0xFF00FF00') 
        self.addControl(self.strAction) 
        self.strAction.setLabel('Image is exisit') 

Я хочу знать, как вы можете использовать для написания в python для XML-анализатора, включить if заявление, что если у меня есть изображение под названием «Изображение 2.jpg», которое возвращается как истинное, я мог бы что-то сделать?

+0

Вы просите нас рекомендовать синтаксический анализатор XML? В stdlib есть несколько [http://docs.python.org/2/library/xml.html] и популярные сторонние библиотеки, такие как ['lxml'] (http://lxml.de) , Stack Overflow не является хорошим сайтом для рекомендаций по использованию библиотеки или подобным субъективным вопросам, но если вы выберете любой из них, попробуйте написать код самостоятельно и застрять, это отличное место, чтобы получить помощь, чтобы отклеить. – abarnert

+0

Как в стороне, почему это помечено как python-2.7, так и python-3.x? Вы пытаетесь написать код, который работает с обеими версиями? Или использовать одну версию, но открытую для переключения, если она облегчит вам жизнь? Или просто не знаете, какой из них вы используете? – abarnert

+0

@abarnert да я. У меня есть синтаксический анализатор XML, но я просто хочу знать, как вы пишете, чтобы оператор if включал синтаксический анализатор xml в python, если у меня есть изображение под названием «image 4.jpg», то я могу изменить изображение с помощью xml id? см. XML-парсер в моем сообщении об обновлении. –

ответ

2

Вот самый простой способ адаптировать свой код, чтобы получить управление которого texture является Image 2.jpg:

Во-первых, вы ищете для элемента с именем texturefocus. Но в вашем примере XML нет такого элемента, и даже если бы он был, тот, который вы ищете, называется texture. Таким образом, очевидно, что вам нужно исправить:

texture = control.find('texture').text 

Во-вторых, вы ищете изображения Image 2.jpg, но нет такого изображения в вашем XML, так что вы не собираетесь, чтобы найти его. Существует Image 2.png, но это не одно и то же. Поэтому, вероятно, вам также нужно это исправить.

И теперь, if утверждение тривиально:

if texture == 'Image 2.png': 

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

Допустим, что вы хотите сделать, это написать функцию, которая возвращает description если есть изображение которого texture является Image 2.png, или возвращает None иначе. Затем:

def find_image2(filename): 
    tree = ET.parse(filename) 
    root = tree.getroot() 
    controls = root.find('controls') 

    for control in controls.findall('control'): 
     texture = control.find('texture') 
     if texture and texture.text == 'Image 2.png': 
      return control.find('description').text 
Смежные вопросы