elementtree 相关问题

ElementTree是一个用于创建和解析XML的Python库。

如何使用ElementTree在具有名称空间的XML文件中查找和编辑标签

我想在我的XML文档中找到特定的标签并编辑其文本或属性。我的XML文件包含名称空间(据我所知,嵌套名称空间)。我想使用的工具...

回答 1 投票 0

如何在具有相同属性的Python XML中将具有相同标签的元素联接在一起?

我有一个这样的XML结构: [[[[[]]]]]]] 您的代码中的一个问题是MY_XML.findall("./pages/page/textbox/textline")返回一个空列表。根元素是pages,它是findall()的上下文。因此,findall("./page/textbox/textline")将起作用。 这里是一个产生所需输出的程序: import xml.etree.ElementTree as ET MY_XML = ET.parse('fe.xml') textlines = MY_XML.findall("./page/textbox/textline") for textline in textlines: fulltext = [] for text_elem in list(textline): # Get the text of each 'text' element and then remove it fulltext.append(text_elem.text) textline.remove(text_elem) # Create a new 'text' element and add the joined letters to it new_text_elem = ET.Element("text", font="NUMPTY+ImprintMTnum", ncolour="0", size="12.482") new_text_elem.text = "".join(fulltext).strip() # Append the new 'text' element to its parent textline.append(new_text_elem) print(ET.tostring(MY_XML.getroot(), encoding="unicode")) 输出: <pages> <page id="1" bbox="0.000,0.000,462.047,680.315" rotate="0"> <textbox id="0" bbox="179.739,592.028,261.007,604.510"> <textline bbox="179.739,592.028,261.007,604.510"> <text font="NUMPTY+ImprintMTnum" ncolour="0" size="12.482">CAPITOLO III</text></textline> </textbox> </page> </pages>

回答 1 投票 1

使用etree解析python中的XML

我有一个XML文件: > [See the docs(和this answer)有关使用ElementTree处理名称空间的详细信息。 这里是一个例子: import xml.etree.ElementTree as ET ns_map = {"wlan": "http://www.microsoft.com/networking/WLAN/profile/v1"} tree = ET.parse("input.xml") print(tree.find(".//wlan:keyMaterial", namespaces=ns_map).text) 打印... THIS IS WHAT I WANNA GET 如果要修改该值并将其保存到文件中,请尝试如下操作: import xml.etree.ElementTree as ET ns_map = {"wlan": "http://www.microsoft.com/networking/WLAN/profile/v1"} # Need this to make sure a prefix isn't added to your namespace declaration. ET.register_namespace("", ns_map.get("wlan")) tree = ET.parse("input.xml") try: tree.find(".//wlan:keyMaterial", namespaces=ns_map).text = "NEW VALUE!" except AttributeError: print("Unable to modify the keyMaterial value.") tree.write("output.xml", xml_declaration=True, encoding="utf-8") 输出 (output.xml) <?xml version='1.0' encoding='utf-8'?> <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1" xmlns:ns1="http://www.microsoft.com/networking/WLAN/profile/v3"> <name>antigon</name> <SSIDConfig> <SSID> <name>antigon</name> </SSID> </SSIDConfig> <connectionType>ESS</connectionType> <connectionMode>auto</connectionMode> <MSM> <security> <authEncryption> <authentication>WPA2PSK</authentication> <encryption>AES</encryption> <useOneX>false</useOneX> </authEncryption> <sharedKey> <keyType>passPhrase</keyType> <protected>false</protected> <keyMaterial>NEW VALUE!</keyMaterial> </sharedKey> </security> </MSM> <ns1:MacRandomization> <ns1:enableRandomization>false</ns1:enableRandomization> </ns1:MacRandomization> </WLANProfile> 注意:ElementTree在处理多个默认名称空间方面做得并不出色,所以这就是将“ ns1”前缀添加到输出的原因。 下 import xml.etree.ElementTree as ET import re xml = '''<?xml version="1.0"?> <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"> <name>antigon</name> <SSIDConfig> <SSID> <name>antigon</name> </SSID> </SSIDConfig> <connectionType>ESS</connectionType> <connectionMode>auto</connectionMode> <MSM> <security> <authEncryption> <authentication>WPA2PSK</authentication> <encryption>AES</encryption> <useOneX>false</useOneX> </authEncryption> <sharedKey> <keyType>passPhrase</keyType> <protected>false</protected> <keyMaterial>THIS IS WHAT I WANNA GET</keyMaterial> </sharedKey> </security> </MSM> <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3"> <enableRandomization>false</enableRandomization> </MacRandomization> </WLANProfile>''' xml = re.sub(' xmlns="[^"]+"', '', xml, count=1) root = ET.fromstring(xml) key_material = root.find('.//keyMaterial') print(key_material.text) 输出 THIS IS WHAT I WANNA GET

回答 2 投票 0

如何在python中注释xml的整个块和单个标签?

如何在python中注释整个xml的特定块和特定标记?在xml下面,有许多 标签。 1)必须注释整个块 {some_data} ,...

回答 1 投票 0

XML解析器返回NoneType

[我正在尝试使用Python中的ElementTree XML解析以下XML格式,但是当我使用.text时,得到的“成员”为None,它给出了属性错误 ... ]] >

回答 2 投票 0

打印元素XML ElementTree Python

我有以下代码:Analyzer = Analyzer(config ='config.cfg',lang ='pt')xml = Analyzer.run(b'EU vou comer tudo que posso hoje。Ontem a noest estive caminhando')打印(str(xml))...

回答 1 投票 0

如何在ElementTree中使用xpath搜寻多个属性

我正在尝试从XML文件中隔离以下值(https://digitallibrary.un.org/search?ln=en&p=A/RES/72/266&f=&rm=&ln=en&sf=&so=d&rg= 50&c = United + Nations + ...

回答 2 投票 -1

使用iterparse()提取值并存储在数据框中

我有以下XML代码(整个代码包含成千上万的人id,这就是为什么我依赖iterparse()的原因,因为文件非常大):

回答 1 投票 0

Python XML ElementTree-findall

我正在使用XML文件。我的文件就是这样:将xml.etree.ElementTree导入为ET xml =''' &...

回答 1 投票 0

使用ElementTree查找路径

Wih ElementTree,我可以打印每次出现的特定标签(在我的情况下为ExpertSettingsSg):#!/ usr / bin / env python3 import xml.etree.ElementTree as ET root = ET.parse('mydoc.xml') .getroot()for ...

回答 1 投票 0

当元素树无法在XML中找到标记时,我不需要返回任何内容

下面给出的XML 伦敦 1 141100 我需要该函数在我...

回答 1 投票 -1

使用XPATH处理格式错误的HTML文件

我继承了别人的(可怕的)代码库,目前正拼命地解决问题。今天,这意味着在我们的模板/主页中收集所有无效链接的列表。我目前是...

回答 4 投票 2

将Python XML ElementTree输出输出为CSV

TL; DR现在,我可以在CSV中输出我想要的信息,但是我只是一遍又一遍地重复最后一个XML文件的数据。这是脚本的最新版本:import csv import glob ...

回答 1 投票 0

python elementtree xpath-在findall @ name = VARIABLEHERE中插入变量

是否可以将变量传递给@name属性?导入xml.etree.ElementTree作为ET树= ET.parse('C:/test.xml')根= tree.getroot()somelist = [root.findall(“中x的x.text .... /

回答 2 投票 0

不是使用ElementTree Python提取XML文件中每个元素中的子元素

我想从XML文件中提取数据。但是问题是,我想要的子元素(portid)不在每个元素中。当它在元素中循环时,我收到错误消息,因为它没有('...

回答 1 投票 0

如何使用python ElementTree访问包含名称空间的XML中的文本

我有一个带有名称空间的简单XML。我无法访问名称空间内的文本。 XML看起来像这样:

回答 1 投票 0

Python ElementTree myroot.findall()

我正在使用Python ElementTree处理XML文件。我的文件是这样的: ...

回答 1 投票 0

使用etree解析xml时无法返回子值

我有一个看起来像 1426 ] >>>]的xml文件。 > 当您运行for child in root:时,此循环将迭代[[only在FullReport 的直接后代中,在您的情况下:firm ,reportDate和rooms,所以没有机会到达room,这是位于下一级。从您的代码(第一个循环)中,我看到您实际上有兴趣在 FullReport / rooms / room 的直接后代中。要打印其标签名称和文本内容,您可以运行例如: for child in root.iter('room'): for step_child in child: print(f'{step_child.tag:20} {step_child.text}') 对于您的示例输入,结果是: roomID PCHAT-0x0000000000000637 roomTitle FX - WBB - CTON description global chat creationDate None removalDate None lastActivityDate 02/07/2020 12:26:24 status Active membership Bilateral isAnonymous false hasActiveAdmins true activeUserCount 17 distinctFirmsInRoom 2 isInternalOnly false isIncognitoForum false 就您的最终任务而言,您可以运行: rows = [] for child in root.iter('rooms'): roomId, roomTitle = 'id', 'ttl' for it in child: if it.tag == 'room': roomId = it.findtext('roomID') roomTitle = it.findtext('roomTitle') elif it.tag == 'users': rows.append([roomId, roomTitle, it.findtext('uuid'), it.findtext('bbgEmail'), it.findtext('fullName'), it.findtext('firmName')]) df = pd.DataFrame(rows, columns=['roomId', 'roomTitle', 'uuid', 'bbgEmail', 'fullName', 'firmName']) 上面的代码基于 room 元素首先出现的假设在它们之后有users个元素。 并添加有关您的帖子中未显示的任何其他列的代码。

回答 1 投票 0

在给定另一个子元素的情况下检索子元素中的文本

下面是XML的示例: [[[London 1 2008 ...

回答 1 投票 -1


© www.soinside.com 2019 - 2024. All rights reserved.