2012-03-01 3 views
1

Я хочу найти быструю функцию, чтобы получить все свойства стиля элемента lxml, которые учитывают таблицу стилей CSS, элемент атрибута стиля и решают проблему herit.Как получить атрибут css элемента lxml?

Например:

HTML:

<body> 
    <p>A</p> 
    <p id='b'>B</p> 
    <p style='color:blue'>B</p> 
</body> 

CSS:

body {color:red;font-size:12px} 
p.b {color:pink;} 

питон:

elements = document.xpath('//p') 
print get_style(element[0]) 
>{color:red,font-size:12px} 
print get_style(element[1]) 
>{color:pink,font-size:12px} 
print get_style(element[2]) 
>{color:blue,font-size:12px} 

Благодаря

+0

Так что вы хотите, не XML синтаксический, но HTML/CSS * интерпретация *, это не покрывается LXML. –

+0

Извините, но единственное, что делает то, что вам нужно, это браузер. Невозможно разрешить CSS-правила, не создавая большой беспорядок в спецификациях HTML, CSS и DOM. Какой беспорядок, а? – AdamKG

+0

Да, я знаю, но мне нужна функция, которая может это сделать. – zedouard

ответ

2

Вы можете сделать это с помощью комбинации lxml и cssutils. This Модуль утилиты cssutils должен иметь возможность делать то, что вы просите. Установите cssutils вместе с этим модулем, а затем запустить следующий код:

from style import * 

html = """<body> 
    <p>A</p> 
    <p id='b'>B</p> 
    <p style='color:blue'>B</p> 
</body>""" 

css = """body {color:red;font-size:12px} 
p {color:yellow;} 
p.b {color:green;}""" 


def get_style(element, view): 
    if element != None: 
     inline_style = [x[1] for x in element.items() if x[0] == 'style'] 
     outside_style = [] 
     if view.has_key(element): 
      outside_style = view[element].getCssText() 
     r = [[inline_style, outside_style]] 
     r.append(get_style(element.getparent(), view)) 
     return r 
    else: 
     return None 

document = getDocument(html) 
view = getView(document, css) 

elements = document.xpath('//p') 
print get_style(elements[0], view) 
+0

Не совсем, это не проблема в вопросе о наследстве. get_style (element [0]) -> {} – zedouard

+0

print get_style (элементы [0], view) -> {color: yellow;} но у меня нет размера шрифта, потому что herit не работает – zedouard

+0

Я обновляю свой пример, теперь это правильно. В этом случае get_style (элементы [0], view) -> {}, однако цвет может быть красным – zedouard

Смежные вопросы