Dibakar Aditya
Dibakar Aditya

Reputation: 4203

ElementTree find returns None even without xmlns

I am trying to replace some values in XML using ElementsTree without xmlns in Python 2.7.5 but it always returns None, no matter what.

Here is my truncated.xml:

<?xml version='1.0' encoding='UTF-8'?>
<definition>
    <scm>
        <configVersion>2</configVersion>
        <userRemoteConfigs>
            <hudson.plugins.git.UserRemoteConfig>
                <url>[email protected]:org/repository.git</url>
                <credentialsId>abcdefgh-123456-7890</credentialsId>
            </hudson.plugins.git.UserRemoteConfig>
        </userRemoteConfigs>
        <branches>
            <hudson.plugins.git.BranchSpec>
                <name>refs/heads/master</name>
            </hudson.plugins.git.BranchSpec>
        </branches>
        <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
        <submoduleCfg/>
        <extensions/>
    </scm>
    <scriptPath>Jenkinsfile</scriptPath>
    <lightweight>true</lightweight>
</definition>

And here is my code in test.py:

from xml.etree import ElementTree as et
tree = et.parse('truncated.xml')
print(tree.find('definition/scm/userRemoteConfigs/hudson.plugins.git.UserRemoteConfig/url'))
tree.find('definition/scm/userRemoteConfigs/hudson.plugins.git.UserRemoteConfig/url').text = '<replacement text>'

Output:

None
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    tree.find('definition/scm/userRemoteConfigs/hudson.plugins.git.UserRemoteConfig/url').text = '<replacement text>'
AttributeError: 'NoneType' object has no attribute 'text'

Upvotes: 1

Views: 191

Answers (1)

Daniel Haley
Daniel Haley

Reputation: 52858

When you build the tree the context is already definition. Try taking definition/ off the front of your xpath...

tree.find('scm/userRemoteConfigs/hudson.plugins.git.UserRemoteConfig/url')

Upvotes: 2

Related Questions