Hướng dẫn python xml find element by attribute value - python xml tìm phần tử theo 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.

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.8K28 Huy hiệu vàng110 Huy hiệu bạc172 Huy hiệu đồng28 gold badges110 silver badges172 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

245K37 Huy hiệu vàng361 Huy hiệu bạc355 Huy hiệu Đồng37 gold badges361 silver badges355 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

Làm cách nào để bạn đọc một thẻ cụ thể trong tệp XML trong Python?

Để phân tích tài liệu XML, bạn cần có toàn bộ tài liệu trong bộ nhớ ...
Để phân tích tài liệu XML ..
Nhập xml.dom.minidom ..
Sử dụng chức năng parse parse để phân tích cú pháp tài liệu [doc = xml.dom.minidom.parse [tên tệp] ;.
Gọi danh sách các thẻ XML từ tài liệu XML bằng mã [= doc.getelementsByTagName [tên tên của thẻ XML thẻ].

Làm thế nào để bạn truy cập các phần tử XML trong Python?

Ví dụ Đọc tệp XML trong Python để đọc tệp XML, trước tiên, chúng tôi nhập lớp ElementTree được tìm thấy bên trong thư viện XML. Sau đó, chúng tôi sẽ chuyển tên tệp của tệp XML cho ElementTree. Phương thức Parse [], để bắt đầu phân tích cú pháp. Sau đó, chúng tôi sẽ nhận được thẻ chính của tệp XML bằng getRoot [].import the ElementTree class found inside the XML library. Then, we will pass the filename of the XML file to the ElementTree. parse[] method, to start parsing. Then, we will get the parent tag of the XML file using getroot[] .

Etree trong Python là gì?

Etree.Mô -đun ElementTree thực hiện một 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 để bạn thêm các phần phụ trong XML trong Python?

Đặt [khóa, giá trị]: Chúng ta có thể đặt khóa thuộc tính trên phần tử bằng SET.ỨNG DỤNG [SUPEuity]: Cái này được sử dụng để nối phần tử con vào gốc hoặc các phần tử phụ vào phần tử chính.append[subelement]: This one is used to append the child element to the root or the sub elements to the main element.

Bài Viết Liên Quan

Chủ Đề