Python/XML 子节点数
Python/XML number of child nodes
我想从 xml 文件下面得到的是:
如果 <term>
节点内的 <broader>
节点数 > 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,因此我对指向 table.
的任何特定元素不感兴趣
你可以使用 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
使用内置 xml 模块,语法与 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)
我想从 xml 文件下面得到的是:
如果 <term>
节点内的 <broader>
节点数 > 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,因此我对指向 table.
你可以使用 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
使用内置 xml 模块,语法与 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)