我想从xml文件下面得到的是:
如果<broader>
节点内的<term>
个节点数> 1
和
这些<broader>
节点中的任何一个值等于<id>
节点的值
然后
打印<value>
节点文本。
<results>
<term>
<altLabel>
<value>Label1</value>
</altLabel>
<broader>11</broader>
<id>1</id>
</term>
<term>
<altLabel>
<value>Label2</value>
</altLabel>
<broader>22</broader>
<broader>2</broader>
<id>2</id>
</term>
<term>
<altLabel>
<value>Label3</value>
</altLabel>
<broader>3</broader>
<broader>33</broader>
<id>3</id>
</term>
<term>
<altLabel>
<value>Label4</value>
</altLabel>
<broader>44</broader>
<broader>44</broader>
<id>4</id>
</term>
</results>
因此,对于上面的XML,我想得到:
Label2
Label3
注意:<term>
节点内的子节点数可能会有所不同。这只是一个示例xml,因此我对指向表的任何特定元素不感兴趣。
答案 0 :(得分:0)
使用BeautifulSoup
可以执行的操作是遍历所有term
个标记,并检查其ID文本是否与其broader
个文本相同:
from bs4 import BeautifulSoup
soup = BeautifulSoup(doc, 'lxml') # doc is your string
termList = soup.findAll("term")
for term in termList:
if len(term.findAll("broader")) > 1:
for broader in term.findAll("broader"):
if term.id.text == broader.text:
print(term.value.text)
将打印:
Label2
Label3
答案 1 :(得分:0)
使用内置xml模块,sytax与beautifulsoup非常相似:)
将path_to_xml
替换为您的xml文件路径
from xml.etree import cElementTree as ET
xml_dat = ET.parse(path_to_xml).getroot()
for term in xml_dat.iter('term'):
broaders = term.findall('broader')
if len(broaders) > 1:
for broader in broaders:
if term.find('id').text == broader.text:
print(term.find('altLabel').find('value').text)