1

I want to evaluate XML documents with this kind of structure:

<?xml version="1.0" encoding="UTF-8"?>
<Service_name version="3.3.0">
...

where Service_name tag name is not constant string, while version attribute is required.

For that purpose this xpath expression: /*[1]/@version evaluates fine with any xpath processor, but I can't figure how with Python ElementTree.

For example:

import xml.etree.ElementTree as ET
doc = ET.parse('sample.xml')
v = find('/*[1]/@version').text

raises KeyError: '@'

I tried similar combinations but none that worked.

How can I get version number from above example document with ElementTree?

2 Answers 2

2

ElementTree uses its own path syntax, which is more or less a subset of xpath. If you want an ElementTree compatible library with full xpath support, try lxml.

Sign up to request clarification or add additional context in comments.

2 Comments

Yes, I use lxml myself, but working on a part of code that should not require additional modules except SPL.
Then you'll have to select the element using the path syntax, and retrieve the attribute with the .get() method: doc.find('/*[1]').get('version') (theta's answer is easier if you know it is the root element)
0

Although it's not XPath as question name, this seems like one way:

doc.getroot().get('version')

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.