ElementTree是一个用于创建和解析XML的Python库。
我正在努力从 citygml 文件中提取建筑物的 ID,但无法成功 我试过这段代码: 导入 xml.etree.ElementTree 作为 ET def 加载文件(): print("开始文件加载过程...
我有一个脚本,应该创建一个空的通知标签,有时用某些文件夹中存在的通知名称填充它。否则它必须保持为空(没有文本)。 该...
ElementTree.find() 似乎错过了最近附加的元素
我无法理解这个。当 find() 从 XML 字符串加载时可以找到完全相同的元素时,为什么它找不到附加元素? 以下函数创建一个
使用Python: 我的程序打开一个 XML 格式的模板,插入用户信息,然后保存它。 模板如下: 使用Python: 我的程序打开一个 XML 格式的模板,插入用户信息,然后保存它。 模板如下: <ids xmlns="http://standards.buildingsmart.org/IDS" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://standards.buildingsmart.org/IDS http://standards.buildingsmart.org/IDS/1.0/ids.xsd"> <info> <title></title> <version></version> <author></author> <date></date> </info> <specifications> </specifications> </ids> 我使用 xml.etree.ElementTree (并在此阶段插入用户数据,出于简单原因我跳过了这一阶段): base_tree = ET.parse('XML_templates/base_structure_02.XML') base_root = base_tree.getroot() ET.indent(base_root,space =" ") xml_str = ET.tostring(base_root, encoding='unicode', method='xml') print(xml_str) 输出是: <ns0:ids xmlns:ns0="http://standards.buildingsmart.org/IDS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://standards.buildingsmart.org/IDS http://standards.buildingsmart.org/IDS/1.0/ids.xsd"> <ns0:info> <ns0:title /> <ns0:version /> <ns0:author /> <ns0:date /> </ns0:info> <ns0:specifications> </ns0:specifications> </ns0:ids> 问题是我不希望程序为每个项目(ns0)获取命名空间,这可能吗?谢谢你 您必须注册命名空间: 例如 ET.register_namespace("", "http://standards.buildingsmart.org/IDS")
如何从列表中的不同目录中删除重复的文件名并将它们用作 xml 标记文本?
我有一个文件树,例如: 2_产品 2-1_CategoryName1_产品 2-1-1_名称1_产品 LLL_nomenclature1_product.zip LLL_nomenclature1_product(文件夹) ...
我想测试python中的服务器是否发送了无效的xml。 代码是 content_element = etree.fromstring(内容) 和 xml 类似: 我想测试 python 中的服务器是否发送了无效的 xml.. 代码是 content_element = etree.fromstring(content) xml 类似: <data = ""></data> 所以由于“”它是无效的 我认为你不能强迫 xml.etree 接受错误的 xml,但你可以使用 beautifulsoup 读取错误的 xml from bs4 import BeautifulSoup soup = BeautifulSoup(content, 'lxml')
用ElementTree解析.targets文件没有找到指定的标签
我正在尝试使用 ElementTree 从 NuGet 包的 .targets 文件中解析信息。 我试图找到的是标签。我正在使用以下 p...
我正在尝试编写一个小脚本来与last.fm API 进行交互。 我有一点使用 ElementTree 的经验,但我以前使用它的方式似乎不起作用,它
XML 1: 1245678 2024-06-06 12345678.pdf XML 1: <invoiceCopy> <document> <invoicenumber>1245678</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>12345678.pdf</pdffilename> <sendingsystemid>ABC</sendingsystemid> </document> </invoicecopy> XML 2: <invoiceCopy> <document> <invoicenumber>2222222</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>2222222.pdf</pdffilename> <sendingsystemid>XYZ</sendingsystemid> </document> </invoicecopy> 所需输出: <invoiceCopy> <document> <invoicenumber>1245678</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>12345678.pdf</pdffilename> <sendingsystemid>ABC</sendingsystemid> </document> </invoicecopy> <invoiceCopy> <document> <invoicenumber>2222222</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>2222222.pdf</pdffilename> <sendingsystemid>XYZ</sendingsystemid> </document> </invoicecopy> 这是我从以下程序得到的输出: <invoiceCopy> <document> <invoicenumber>1245678</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>12345678.pdf</pdffilename> <sendingsystemid>ABC</sendingsystemid> </document> <invoiceCopy> <document> <invoicenumber>2222222</invoicenumber> <invoicedate>2024-06-06</invoicedate> <pdffilename>2222222.pdf</pdffilename> <sendingsystemid>XYZ</sendingsystemid> </document> </invoicecopy> </invoicecopy> 我的计划: xml_files = glob.glob(XML_DIR +"/*.xml") print ("xml files are " , xml_files) xml_element_tree = None for filename in xml_files: data = ElementTree.parse(filename).getroot() print (data) for result in data.iter('invoiceCopy'): if xml_element_tree is None: newfilename = "print" + datetime.today().strftime('%Y%m%d_%H%M%S')+ ".xml" print(newfilename) xml_element_tree=data else: for statement in data.iter('invoiceCopy'): xml_element_tree.append(statement) if xml_element_tree is not None: result1 = '' m_encoding = "iso-8859-1" dom = xml.dom.minidom.parseString(ElementTree.tostring(xml_element_tree)) xml_string = dom.toprettyxml() for result in xml_string.split('\n'): if not result.strip() == '': result1=result1+result+"\n" part1, part2 = result1.split('?>') with open("/data/ebpp/star/fh/invoicecopy/print/" + newfilename, "w") as xfile: xfile.write(part1 + 'encoding=\"{}\"?>'.format(m_encoding) + part2) xfile.close() 为什么第二个 xml 附加在第一个 xml 的根内部?请帮忙 为什么第二个 xml 附加在第一个 xml 的根目录中? 因为你的代码就是这样做的: if xml_element_tree is None: newfilename = "print" + datetime.today().strftime('%Y%m%d_%H%M%S')+ ".xml" print(newfilename) xml_element_tree=data else: for statement in data.iter('invoiceCopy'): xml_element_tree.append(statement) 在第一次迭代中,xml_element_tree 为 None,因此它直接使用数据。 在随后的迭代中,它……将所有invoiceCopy元素追加到xml_element_tree(本身就是一个invoiceCopy元素)。 XML 树只能有一个根,因此您必须在循环之前创建自己的新根元素,或者使用 Python 列表。
我正在尝试使用 etree.ElementTree 从许多 xml 文件加载数据。 xml 中的数据类似于以下示例: 2927695 我正在尝试使用 etree.ElementTree 从许多 xml 文件加载数据。 The data in the xml looks like this sample: <mydata> <Record> <Field name="ParaA">2927695</Field> <Field name="Index"/> <Field name="ParaB">D:\path\data</Field> <Field name="ParaC">116.4</Field> <Field name="ParaD">1583.4</Field> <Field name="ParaBE">12.0</Field> <Row> <Field name="Para1">1</Field> <Field name="Para2">D5A</Field> <Field name="Para3">1586.0</Field> </Row> <Row> <Field name="Para1">2</Field> <Field name="Para2">D4A</Field> <Field name="Para3">118.0</Field> <Field name="Para4">12.0</Field> </Row> </Record> </mydata> 行数是动态的。我想要 df 与 帕拉A |第 1 段 |帕拉2 已阅读文档但无法解决它。我认为问题在于该行正在记录中。 我需要的是像下面这样的df ParaA Para1 Para2 Para3 Para4 2927695 1 D5A 1586.0 2927695 2 D4A 118.0 12.0 我的代码的 df 是空的 import pandas as pd import numpy as np import xml.etree.ElementTree as ET xml_file = r'.\Test.xml' tree = ET.parse(xml_file) root = tree.getroot() data = [] for record in root.findall('record'): record_data = {} for elem in record: record_data[elem.tag] = elem.text data.append(record_data) df = pd.DataFrame(data) print(df) 希望有人能帮忙。 适用于您提供的数据 for record in root.findall('Record'): record_data = [] for elem in record: match elem.tag: case 'Field': if elem.attrib['name'] == 'ParaA': paraa = elem.text case 'Row': row={'ParaA': paraa} for field in elem.findall('Field'): row.update({field.attrib['name']:field.text}) record_data.append(row) df 输出: ParaA Para1 Para2 Para3 Para4 0 2927695 1 D5A 1586.0 NaN 1 2927695 2 D4A 118.0 12.0
Pylint 错误消息:“E1101:模块‘lxml.etree’没有‘strip_tags’成员’”
我第一次在个人项目中尝试使用 lxml 和 python,并且我尝试使用 etree.strip_tags() 从一些源代码中剥离标签。 出于某种原因,我一直得到...
我一直在尝试使用 python 中的 ElementTree 解析 xml 文档来修改其中一个元素,但是由于命名空间,我不断遇到问题。 我可以从我的...
这是 jenkins xml 文件的一部分。 我想用 xpath 提取project_name 的defaultValue。 在本例中,该值是 *****。 ...
如何使用 ElementTree 从 xml 中提取 python 中“xml:id”的值到数据框中
我目前正在将书目信息从 XML 结构整理为几乎任何其他可用的内容。我的最后一步是提取“xml:id”的值
我有一个脚本,我想用它来创建写入文件以更新设备上的序列号。 它执行文件夹/文件路径检查 -> 复制 Read.xml 并创建 Write.xml(复制) -> Obta...
ElementTree 错误:“xml.etree.ElementTree.Element”对象没有属性“root”
我是 XML 新手,一直在努力理解如何从 API 调用中解压以下 xml 响应。 我尝试过使用 import xml.etree.ElementTree 但没有运气。大多数教程都是...
Python ElementTree – 如何编辑 XML 文件并将某些标签保持为自关闭?
我正在使用 ElementTree 在 Python 3.10 中编辑 XML 文件。 我需要某些空元素来使用自关闭标签,即 ,而其他元素则需要完整写出 ...
我查看了有关此问题的其他问题,但没有一个对我有帮助。我正在使用 ElementTree 解析 XML,但在查找特定标签时遇到问题,该标签可能是可选的,而我可以
我需要使用 Elementtree 按 reqdate 对以下示例 XML 的“行”元素进行排序(desc - 从最新到最旧)。 1234 我需要使用 Elementtree 按 reqdate 对以下示例 XML 的“行”元素进行排序(desc - 从最近到最旧)。 <doc> <header> <ordernum>1234</ordernum> <customer>1</customer> <line> <lineno>1</lineno> <reqdat>2024-01-01</reqdat> </line> <line> <lineno>2</lineno> <reqdat>2024-03-01</reqdat> </line> <line> <lineno>3</lineno> <reqdat>2024-02-01</reqdat> </line> </header> </doc> 我正在寻找的结果如下。 <doc> <header> <ordernum>1234</ordernum> <customer>1</customer> <line> <lineno>2</lineno> <reqdat>2024-03-01</reqdat> </line> <line> <lineno>3</lineno> <reqdat>2024-02-01</reqdat> </line> <line> <lineno>1</lineno> <reqdat>2024-01-01</reqdat> </line> </header> </doc> 用例是将其发送到使用 XML 中的顺序的打印机,并且需要按此顺序打印各行。 我正在尝试排序函数和 lambda 排序,但还没有弄清楚。 尝试: import xml.etree.ElementTree as ET xml_string = """ <doc> <header> <ordernum>1234</ordernum> <customer>1</customer> <line> <lineno>1</lineno> <reqdat>2024-01-01</reqdat> </line> <line> <lineno>2</lineno> <reqdat>2024-03-01</reqdat> </line> <line> <lineno>3</lineno> <reqdat>2024-02-01</reqdat> </line> </header> </doc> """ root = ET.fromstring(xml_string) header = root.find(".//header") lines = header.findall(".//line") lines = sorted(lines, key=lambda tag: tag.find("reqdat").text, reverse=True) for l in list(header): if l.tag == "line": header.remove(l) for l in lines: header.append(l) print(ET.tostring(root, encoding="unicode")) 打印: <doc> <header> <ordernum>1234</ordernum> <customer>1</customer> <line> <lineno>2</lineno> <reqdat>2024-03-01</reqdat> </line> <line> <lineno>3</lineno> <reqdat>2024-02-01</reqdat> </line> <line> <lineno>1</lineno> <reqdat>2024-01-01</reqdat> </line> </header> </doc>