尝试使用Python中的ElementTree获取XML文件中所有元素的标题,其中child2属性ipsum文本内容为" true"。这是XML:
<element>
<title>Hello world</title>
<child1>Lorem</child1>
<child2 attr="ipsum">true</child2>
</element>
<element>
<title>Hello world 2</title>
<child1>Lorem</child1>
</element>
<element>
<title>Hello world 3</title>
<child1>Lorem</child1>
<child2 attr="ipsum">true</child2>
</element>
我想要返回的结果是一个包含以下标题的列表:
Hello world
Hello world 3
第二个元素标题为&#34; Hello world 2&#34;因为缺少这个子元素而被排除在外:
<child2 attr="ipsum">true</child2>
任何提示?
答案 0 :(得分:0)
部分问题是ipsum不是您发布的xml中的属性。它是属性attr的值。另一个例子是如果你说<child2 name="John"></child2>
。在这种情况下,name是属性,John是该属性的值。如果您尝试维护当前的xml结构,则以下代码应该有效:
import xml.etree.ElementTree as ET
tree = ET.parse('elements.xml')
root = tree.getroot()
for element in root:
childEl = element.find('child2')
if childEl != None and childEl.text == "true":
if element.find('title') != None:
print element.find('title').text
它循环遍历元素,检查child2元素以确保它存在,以及该元素的文本值是否为&#34; true&#34;。
如果您希望代码的行为方式与ipsum设置为true的方式相同,那么您可以使用以下代码和xml示例:
<?xml version="1.0"?>
<data>
<element>
<title>Hello world</title>
<child1>Lorem</child1>
<child2 ipsum="true"></child2>
</element>
<element>
<title>Hello world 2</title>
<child1>Lorem</child1>
</element>
<element>
<title>Hello world 3</title>
<child1>Lorem</child1>
<child2 ipsum="true"></child2>
</element>
</data>
import xml.etree.ElementTree as ET
tree = ET.parse('elements.xml')
root = tree.getroot()
for element in root:
childEl = element.find('child2')
if childEl != None and childEl.get("ipsum") == "true":
if element.find('title') != None:
print element.find('title').text
希望这有帮助!如果有任何您希望我澄清的话,请告诉我。