I am trying to easily access values from an xml file.
<artikelen>
<artikel nummer="121">
<code>ABC123</code>
<naam>Highlight pen</naam>
<voorraad>231</voorraad>
<prijs>0.56</prijs>
</artikel>
<artikel nummer="123">
<code>PQR678</code>
<naam>Nietmachine</naam>
<voorraad>587</voorraad>
<prijs>9.99</prijs>
</artikel>
..... etc
If i want to acces the value ABC123, how do I get it?
import xmltodict
with open('8_1.html') as fd:
doc = xmltodict.parse(fd.read())
print(doc[fd]['code'])
答案 0 :(得分:14)
使用您的示例:
import xmltodict
with open('artikelen.xml') as fd:
doc = xmltodict.parse(fd.read())
如果您检查doc
,则会看到它是OrderedDict
,按标记排序:
>>> doc
OrderedDict([('artikelen',
OrderedDict([('artikel',
[OrderedDict([('@nummer', '121'),
('code', 'ABC123'),
('naam', 'Highlight pen'),
('voorraad', '231'),
('prijs', '0.56')]),
OrderedDict([('@nummer', '123'),
('code', 'PQR678'),
('naam', 'Nietmachine'),
('voorraad', '587'),
('prijs', '9.99')])])]))])
根节点名为artikelen
,子节点artikel
是OrderedDict
个对象的列表,因此,如果您希望每篇文章都有code
,那么会这样做:
codes = []
for artikel in doc['artikelen']['artikel']:
codes.append(artikel['code'])
# >>> codes
# ['ABC123', 'PQR678']
如果您只在code
为nummer
时特别想要121
,那么您可以这样做:
code = None
for artikel in doc['artikelen']['artikel']:
if artikel['@nummer'] == '121':
code = artikel['code']
break
也就是说,如果您要解析XML文档并想要搜索这样的特定值,我会考虑使用ElementTree
支持的XPath expressions。
答案 1 :(得分:0)
这是使用xml.etree 你可以试试这个:
for artikelobj in root.findall('artikel'):
print artikelobj.find('code')
如果您想根据属性&#39; nummer&#39;提取特定代码。 artikel,然后你可以试试这个:
for artikelobj in root.findall('artikel'):
if artikel.get('nummer') == 121:
print artikelobj.find('code')
这将只打印您想要的代码。
答案 2 :(得分:-1)
To read .xml files :
import lxml.etree as ET
root = ET.parse(filename).getroot()
value = root.node1.node2.variable_name.text
答案 3 :(得分:-2)
您可以使用XPath Expression使用lxml包。
from lxml import etree
f = open("8_1.html", "r")
tree = etree.parse(f)
expression = "/artikelen/artikel[1]/code"
l = tree.xpath(expression)
code = next(i.text for i in l)
print code
# ABC123
这里需要注意的是表达方式。 /artikelen
是根元素。 /artikel[1]
选择artikel
下的第一个root
元素(注意第一个元素不在索引0处)。 /code
是artikel[1]
下的子元素。您可以在lxml和xpath syntax了解更多信息。