2012-07-05 21 views
1

我可以使用xml.etree.ElementTree中的element.findall()在單個屬性中查找具有多個值的元素嗎?找到具有多個值的xml元素

我可以用它來找到所有的div元素帶有class =「日」:

from xml.etree.ElementTree import ElementTree 

calendar = ElementTree() 
calendar.parse("calendar-week.xml") 

calendar.findall('.//div[@class="day"]') 

或此找到所有與類=「第一天」的div元素的:

calendar.findall('.//div[@class="first day"]') 

但有沒有辦法找到他們班有「日」的所有div元素?我找不到有關如何執行此操作的任何文檔。有沒有在這裏使用正則表達式的方法?

<body> 
    <div class="calendar-week"> 
     <div class="first day" id="su">Sunday</div> 
     <div class="day" id="mo">Monday</div> 
     <div class="day" id="tu">Tuesday</div> 
     <div class="day" id="we">Wednesday</div> 
     <div class="day" id="th">Thursday</div> 
     <div class="day" id="fr">Friday</div> 
     <div class="last day" id="sa">Saturday</div> 
     <div class="clear-float"></div> 
    </div><!-- /calendar-week --> 
</body>  
+0

在回答中提供的XPath的長期找到[這裏]( http://stackoverflow.com/questions/1390568/xpath-how-to-match-attributes-that-c​​ontain-a-certain-string)與更多的例子像@stranac的一個,但沒有一個使用xml.etree。 ElementTree的。也許xml.etree不支持所有的xpath選項? – dansalmo 2012-07-05 21:47:57

回答

1

此代碼工作基礎上,從@stranac

from lxml import etree as ET 

calendar = ET.ElementTree() 
calendar.parse("calendar-week.xml") 

elem_list = calendar.xpath('//div[contains(concat(" ", @class, " "), " day ")]') 
1

此XPath是你會怎麼平時做這樣的:

'//div[contains(concat(" ", @class, " "), " day ")]' 
+0

當我嘗試這個或更簡單:'.//div[contains(@class,「day」)]'我得到SyntaxError:無效的謂詞。 – dansalmo 2012-07-05 21:37:43

+0

感謝您使用xpath示例,基於它我明白我需要使用lxml模塊,因爲它具有完整的xpath支持。 – dansalmo 2012-07-06 01:37:28

+0

哦,對不起,沒有注意到你正在使用'xml.etree' – stranac 2012-07-06 15:15:56

相關問題