2012-05-25 18 views
10

bu python 2.7.3 (veya 2.7.0) kodu ile özniteliğin değerini değiştirmek istiyorum "android: versionCode = '2'",Python 2.7: nesne "ElementTree" özniteliği "register_namespace" özeti yok

#!/usr/bin/python 
from xml.etree.ElementTree import ElementTree, dump 
import sys, os 

# Problem here: 
ElementTree.register_namespace("android", "http://schemas.android.com/apk/res/android") 

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

dump(tree) 

"burada Problem" ile yorumladı kod satırını kullanarak değil, elementtree olan otomatik adlandırma http://schemas.android.com/apk/res/android "ns0" (ns0" ile sonuçlanan için ad takma: versionCode "android" ad alanı öneki vardır = '3' ".

Bu yüzden ad alanı URL'sini here belgesine sahip olan" android "adında eşlemek için ElementTree.register_namespace kullanıyorum.

Bunu çalıştığımda olsun hatadır: Bu neden çalışmadığını

AttributeError: type object 'ElementTree' has no attribute 'register_namespace' 

Herkes bilir? Bu yöntem python 2.7'de mevcut olmalıdır.

cevap

23

register_namespace() is a function contained within the ElementTree module.
O ElementTree sınıfı içinde yer almayan edilir ... kenara

An: Bazen bunu yaparken neden olur karışıklık genellikle modül ve sınıf için aynı adı kullanmak tavsiye edilmez çünkü. Ama biz, yaygın olarak kullanılan bir modülü yeniden adlandırarak üretim kodunu kırmak üzereyiz değil mi? işte bu,

#!/usr/bin/python 
import xml.etree.ElementTree as ET # import entire module; use alias for clarity 
import sys, os 

# note that this is the *module*'s `register_namespace()` function 
ET.register_namespace("android", "http://schemas.android.com/apk/res/android") 

tree = ET.ElementTree() # instantiate an object of *class* `ElementTree` 
tree.parse("AndroidManifest.xml") 
root = tree.getroot() 
root.attrib["{http://schemas.android.com/apk/res/android}versionCode"] = "3" 

ET.dump(tree) # we use the *module*'s `dump()` function 
+0

Parlak:

Siz sadece kodunu değiştirmek gerekir. Teşekkür ederim Bernie. – derFunk

+0

Şerefe, dostum. Mutlu kodlama size – bernie

+0

Yığın taşmasıyla ilgili 5 benzer soru var ve bu tek doğru cevap, teşekkürler – seibelj

İlgili konular