2012-11-09 95 views
2

我想使用lxml更改android xml文件的某些屬性值。如何使用lxml更改android xml文件中的「android:text」屬性值

例如:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <TextView android:id="@+id/version_label" 
       android:layout_marginLeft="5sp" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="version"/> 
</LinearLayout> 

我想改變 「機器人:文本」 值,但

textViewTagNode.attrib['android:text'] = "new value" 

不能工作,既不

textViewTagNode.set('android:text', 'new value') 

可以工作。我得到的是「無效的屬性名稱u'android:text'」

我知道這是命名空間問題,但我不知道如何解決它。

非常感謝。

+0

我想是因爲LXML是一個Python庫,可能添加「蟒蛇」的標籤。 –

回答

1

你的關鍵不在於'android:text''{http://schemas.android.com/apk/res/android}text'

In [23]: s = '''<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 
    <TextView android:id="@+id/version_label" 
       android:layout_marginLeft="5sp" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="version"/> </LinearLayout>''' 

In [24]: tree = etree.XML(s)           


In [25]: c = tree.getchildren()[0] 

In [26]: c.items() 
Out[26]: [('{http://schemas.android.com/apk/res/android}id', '@+id/version_label'), ('{http://schemas.android.com/apk/res/android}layout_marginLeft', '5sp'), ('{http://schemas.android.com/apk/res/android}layout_width', 'fill_parent'), ('{http://schemas.android.com/apk/res/android}layout_height', 'wrap_content'), ('{http://schemas.android.com/apk/res/android}text', 'version')] 
+0

非常感謝!^ _ ^我使用'textViewTagNode.set('{http://schemas.android.com/apk/res/android}文本','新值')',它確實有效! –