2012-07-05 38 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