有没有办法在ElementTree的属性名称中使用简单的“android:”?

时间:2013-10-30 16:41:31

标签: android python attributes android-manifest elementtree

我正在使用Python的AndroidManifest.xml解析ElementTree。我需要将android命名空间注册为http://schemas.android.com/apk/res/android,否则ElementTree会将其替换为ns0之类的内容。这是不直观的,但现在它有效。

当访问节点的属性时,我希望能够简单地指定例如。 elem.attrib["android:versionCode"]。但它不起作用,因为ElementTree希望我像这样使用它:

ET.register_namespace("android", "http://schemas.android.com/apk/res/android")

tree = ET.ElementTree()
tree.parse("AndroidManifest.xml")
root = tree.getroot()
root.attrib["{http://schemas.android.com/apk/res/android}versionCode"] = "3"

即使在文件中也是android:versionCode

由于这是违反直觉的,有没有办法使用root.attrib["android:versionCode"]代替?

1 个答案:

答案 0 :(得分:0)

不,没有其他方法可以在ElementTree中指定“限定名称”。

来自http://effbot.org/zone/element-namespaces.htm

  

在元素树中,合格名称以Clark表示法中的通用名称存储,该通用名称将URI和本地部分组合成单个字符串,并以>“ {uri} local”给出。

     

“ {{http://www.w3.org/1999/xhtml} a”

     

“ {{http://effbot.org/namespace/letters} a”

其他参考