Tôi đang sử dụng Python XMLelementTree và muốn gán hoặc sửa đổi giá trị phần tử XML dựa trên thuộc tính của nó. Ai đó có thể cho tôi một ý tưởng làm thế nào để làm điều này?
Ví dụ: đây là tệp XML và tôi cần đặt giá trị cho phần tử "Số" dựa trên thuộc tính "Sys/Phonenumber/1", "Sys2/SMSNumber/1", v.v.
Chỉnh sửa: Đã thêm đóng cho rễ thẻ trong tệp XML.
1stthomas
7212 Huy hiệu vàng15 Huy hiệu bạc22 Huy hiệu đồng2 gold badges15 silver badges22 bronze badges
Đã hỏi ngày 21 tháng 3 năm 2012 lúc 1:03Mar 21, 2012 at 1:03
Bạn có thể truy cập giá trị thuộc tính như thế này:
from elementtree.ElementTree import XML, SubElement, Element, tostring
text = """
"""
elem = XML[text]
for node in elem.find['phoneNumbers']:
print node.attrib['topic']
# Create sub elements
if node.attrib['topic']=="sys/phoneNumber/1":
tag = SubElement[node,'TagName']
tag.attrib['attr'] = 'AttribValue'
print tostring[elem]
Quên nói, nếu phiên bản ElementTree của bạn lớn hơn 1.3, bạn có thể sử dụng XPath:
elem.find['.//number[@topic="sys/phoneNumber/1"]']
//effbot.org/zone/element-xpath.htm
Hoặc bạn có thể sử dụng cái đơn giản này:
for node in elem.findall['.//number']:
if node.attrib['topic']=="sys/phoneNumber/1":
tag = SubElement[node,'TagName']
tag.attrib['attr'] = 'AttribValue'
Đã trả lời ngày 21 tháng 3 năm 2012 lúc 1:35Mar 21, 2012 at 1:35
FOCUSHEARTFOCUSHEARTfocusheart
3272 Huy hiệu bạc3 Huy hiệu đồng2 silver badges3 bronze badges
4
Đối với tôi, phần tử này đã cắt mã mã hoạt động để tìm phần tử theo thuộc tính:
import xml.etree.ElementTree as ET
tree = ET.parse['file.xml']
root = tree.getroot[]
topic=root.find[".//*[@topic='sys/phoneNumber/1']"].text
Đã trả lời ngày 28 tháng 2 năm 2019 lúc 20:15Feb 28, 2019 at 20:15
Eduard Florinescueduard FlorinescuEduard Florinescu
15.9K28 Huy hiệu vàng111 Huy hiệu bạc174 Huy hiệu đồng28 gold badges111 silver badges174 bronze badges
Tôi không quen với xmlElementTree
, nhưng nếu bạn đang sử dụng một thứ gì đó có khả năng của các biểu thức xpath
, bạn có thể định vị một nút bằng giá trị thuộc tính bằng cách sử dụng một biểu thức như thế này:
//number[@topic="sys/phoneNumber/1"]
Vì vậy, sử dụng mô -đun
from elementtree.ElementTree import XML, SubElement, Element, tostring
text = """
"""
elem = XML[text]
for node in elem.find['phoneNumbers']:
print node.attrib['topic']
# Create sub elements
if node.attrib['topic']=="sys/phoneNumber/1":
tag = SubElement[node,'TagName']
tag.attrib['attr'] = 'AttribValue'
print tostring[elem]
0:>>> import lxml.etree as etree
>>> doc = etree.parse['foo.xml']
>>> nodes = doc.xpath['//number[@topic="sys/phoneNumber/1"]']
>>> nodes
[]
>>> etree.tostring[nodes[0]]
'\n '
Đã trả lời ngày 21 tháng 3 năm 2012 lúc 1:16Mar 21, 2012 at 1:16
Larskslarskslarsks
247K37 Huy hiệu vàng367 Huy hiệu bạc362 Huy hiệu Đồng37 gold badges367 silver badges362 bronze badges
Larsks giải thích cách sử dụng XPath để tìm thấy những gì bạn đang làm rất tốt. Bạn cũng muốn thay đổi một thuộc tính. Cách tốt nhất có lẽ là thêm một thuộc tính mới và xóa bản gốc. Khi bạn nhận được kết quả nút, đó là một danh sách với một mục nhập duy nhất [số].
# This returns sys/phoneNumber/1
nodes[0].get["topic"]
# To change the value, use set
nodes[0].set["topic", "new/value/of/phone/number"]
Hi vọng điêu nay co ich.
Ngoài ra, thẻ gốc kết thúc của bạn không đóng đúng cách.
Đã trả lời ngày 21 tháng 3 năm 2012 lúc 1:58Mar 21, 2012 at 1:58