etree.findall: "OR'-بحث؟
-
20-09-2019 - |
سؤال
وأريد للعثور على جميع تعريفات الأنماط في ملف XHTML مع lxml.etree.findall
. هذا يمكن أن يكون بهذه البساطة
elems = tree.findall('link[@rel="stylesheet"]') + tree.findall('style')
ولكن المشكلة مع تعريفات الأنماط CSS هي أن المسائل النظام، ومنها مثلا.
<link rel="stylesheet" type="text/css" href="/media/css/first.css" />
<style>body:{font-size: 10px;}</style>
<link rel="stylesheet" type="text/css" href="/media/css/second.css" />
وإذا تم تطبيق محتويات العلامة style
بعد القواعد في اثنين من العلامات link
، قد تكون النتيجة مختلفة تماما عن واحد حيث يتم تطبيق قواعد من أجل التعريف.
وهكذا، كيف أود أن تفعل البحث التي inlcudes كلا link[@rel="stylesheet"]
وstyle
؟
المحلول
وممكن استخدام XPATH:
data = """<link rel="stylesheet" type="text/css" href="/media/css/first.css" />
<style>body:{font-size: 10px;}</style>
<link rel="stylesheet" type="text/css" href="/media/css/second.css" />
"""
from lxml import etree
h = etree.HTML(data)
h.xpath('//link[@rel="stylesheet"]|//style')
[<Element link at 97a007c>,
<Element style at 97a002c>,
<Element link at 97a0054>]
لا تنتمي إلى StackOverflow