对于下面的xml示例(不是实际的xml只是指示性的),对于我尝试的每个<field>
记录:
打印出ref
标记的title
标记和genre
属性的field
属性,但仅打印ref
title
属性的12, thriller
属性tag等于12.对于这个xml,它将打印出来:
<?xml version="1.0" encoding="utf-8" ?>
<record>
<field genre='comedy'>
<title ref='123'>Title1</title>
<author>Author1</author>
<example>xml - valid xml file</example>
</field>
<field genre='comedy'>
<title ref='123'>Title1</title>
<author>Author2</author>
<example>xml - valid xml file</example>
</field>
<field genre='thriller'>
<title ref='12'>Title</title>
<author>Author3</author>
<example>xml - valid xml file</example>
</field>
</record>
child[0]
使用Element Tree 20.5 documentation我已经能够使用索引完成此操作,例如引用field
而不是import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for child in root:
if 'ref' in child[0].attrib:
x = child[0].get('ref')
if x == '12':
y = child.get('genre')
print(x, y)
代码:
child[0]
虽然这确实有效,但如果由于某种原因在位置public static function getUpperCase($str) {
preg_match_all('/\b[A-Z][a-zA-Z]*(\s+[A-Z][a-zA-Z]*)*\b/', $str, $matches);
return $matches[0];
}
的xml中有一个额外的元素,它将无法按要求工作。
我如何通过名称而不是索引来引用它?
答案 0 :(得分:1)
您可以使用find('title')
代替child[0]
在父title
内找到名为<field>
的子元素:
for child in root:
title = child.find('title')
if 'ref' in title.attrib:
x = title.get('ref')
if x == '12':
y = child.get('genre')
print(x, y)