Hướng dẫn python xml find element with attribute value - python xml tìm phần tử có giá trị thuộc tính

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.

Hướng dẫn python xml find element with attribute value - python xml tìm phần tử có giá trị thuộc tính

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"]')

http://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

Hướng dẫn python xml find element with attribute value - python xml tìm phần tử có giá trị thuộc tính

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

Etree trong Python là gì?

Mô -đun xml.etree.elementtree thực hiện API đơn giản và hiệu quả để phân tích và tạo dữ liệu XML.Thay đổi trong phiên bản 3.3: Mô -đun này sẽ sử dụng triển khai nhanh bất cứ khi nào có sẵn.implements a simple and efficient API for parsing and creating XML data. Changed in version 3.3: This module will use a fast implementation whenever available.

Làm thế nào giá trị thuộc tính có thể được viết bằng XML?

Một thuộc tính nên được khai báo bằng cách sử dụng khai báo danh sách thuộc tính trong DTD (Định nghĩa loại tài liệu).Một phần tử thuộc tính được sử dụng mà không có bất kỳ trích dẫn nào và giá trị thuộc tính được sử dụng trong một trích dẫn duy nhất ('') hoặc kép (phạm lỗi).Một tên thuộc tính và giá trị của nó phải luôn luôn xuất hiện theo cặp.the attribute value is used in a single (' ') or double quotation (” “). An attribute name and its value should always appear in pair.

Pandas có thể đọc các tệp XML không?

Thư viện phân tích dữ liệu PANDAS cung cấp các chức năng để đọc/ghi dữ liệu cho hầu hết các loại tệp.Ví dụ: nó bao gồm read_csv () và to_csv () để tương tác với các tệp CSV.Tuy nhiên, Pandas không bao gồm bất kỳ phương pháp nào để đọc và ghi các tệp XML.Pandas does not include any methods to read and write XML files.