0
我有xml與命名空間,在那裏我能夠得到元素的值。 我想用不同的文本更新值。但是我想根據<vlid>
標記值更新XML。如果此vlid值不匹配,則只有程序應迭代下一個vlink
標記並查找匹配的文本。我可以匹配vlid
。我能夠更新XML,但在我的情況下,值全部更新爲link
標籤,而不考慮vlid
的值。更新xml元素值和更新某些標籤
我的問題是我有兩個標籤,其中link
裏面有相同的元素列表,並且使用xpath進行遞歸搜索,因此在標籤中找到了這兩個元素。我無法想象如何將其限制爲單個元素。
這裏是XML文件
<vtest
xmlns="test:file">
<lsm>
<m-id>v1</m-id>
<name>v1</name>
<communication>bi</communication>
<link>
<vlid>text</vlid>
<idx>text</idx>
<type>text</type>
<link>text</link>
<vl-p>
<Type>text</Type>
<n-type>text</n-type>
<n-id>text</n-id>
<k-name>text</k-name>
<k-id>text</k-id>
<t-name>text</t-name>
<l-work>text</l-work>
<t-id>text</t-id>
<is-required>text</is-required>
</vl-p>
</link>
<link>
<vlid>text</vlid>
<idx>text</idx>
<type>text</type>
<link>text</link>
<vl-p>
<Type>text</Type>
<n-type>text</n-type>
<n-id>text</n-id>
<k-name>text</k-name>
<k-id>text</k-id>
<t-name>text</t-name>
<l-work>text</l-work>
<t-id>text</t-id>
<is-required>text</is-required>
</vl-p>
</link>
</lsm>
</vtest>
這裏是我的代碼
def update_ld(root, ns, k-name, t-name, n-id, t-id, Type, type):
""" Update VLDs with Openstack Values.! """
for vld_list in root.xpath('.//ns:type', namespaces=ns):
vld_list.text = type
for vld_list in root.xpath('.//ns:Type', namespaces=ns):
vld_list.text = Type
for vld_list in root.xpath('.//ns:k-name', namespaces=ns):
vld_list.text = k_name
for vld_list in root.xpath('.//ns:n-id', namespaces=ns):
vld_list.text = n_id
for vld_list in root.xpath('.//ns:t-name', namespaces=ns):
vld_list.text = t_name
for vld_list in root.xpath('.//ns:t-id', namespaces=ns):
vld_list.text = t_id
etree.ElementTree(root).write(xmlfile, pretty_print='True')
你怎麼罵你的函數'update_ld'與xml的根目錄,還是首先選擇了一個元素? – PRMoureu
@PRMoureu:我使用xml的根目錄調用'update_ld'。 – tgcloud