即使没有 xmlns,ElementTree 也能找到 returns None

ElementTree find returns None even without xmlns

我正在尝试在 Python 2.7.5 中使用不带 xmlns 的 ElementsTree 替换 XML 中的一些值,但无论如何它总是 returns None。

这是我的 truncated.xml:

<?xml version='1.0' encoding='UTF-8'?>
<definition>
    <scm>
        <configVersion>2</configVersion>
        <userRemoteConfigs>
            <hudson.plugins.git.UserRemoteConfig>
                <url>git@github.company.com: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>

这是我在 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>'

输出:

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'

构建树时,上下文已经 definition。尝试将 definition/ 从 xpath 的前面去掉...

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