elementtree 相关问题

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

xml.etree.ElementTree 上的缩进功能不一致

代码的目的是将 XML 块插入到 XML 基本结构中以创建最终的 XML 输出。 导入 xml.etree.ElementTree 作为 ET 从 xml.etree.ElementTree 导入 XMLParser 基础树...

回答 1 投票 0

使用“ElementTree”库将给定表达式替换为 XML 文件中的值后打印数据

给定的 XML 文件片段是: 给定的 XML 文件片段是: <?xml version="1.0" standalone="yes"?> <event_configuration family="21" version="2"> <pqr subtype="abc"> <event val="73002" name="$MyCpu"> </event> <event val="73003" name="$MyCpuKernel"> </event> <metric name="Ratio" expression="$MyCpuKernel / $MyCpu"> </metric> </pqr> </event_configuration> 我已经使用Python中的“ElementTree”库解析了这个xml文件,请找到下面的代码: def parse_xml_to_json(self): data = {'metric': []} root = ET.fromstring(self.xml_file) for element in root.findall('.//*'): element_type = element.tag if element_type not in ["pqr", "stu", "vwx"]: continue subtype_name = element.attrib['subtype'] event_map = {} for event in element.findall('.//event'): event_name = event.attrib['name'] val_value = event.attrib['val'] event_map[event_name] = val_value for metric in element.findall('metric'): expression = metric.attrib['expression'] metric_name = metric.attrib['name'] for event_name, val_value in event_map.items(): expression = expression.replace(event_name, val_value) data['metric'].append({ 'Name': metric_name, 'Expression': expression, 'Type': element_type }) return data 我正在获取输出,但此代码无法将“Expression”中存在的事件名称替换为 val_value,如下所示:- 输出: { "metric": [ { "Name": "Ratio", "Expression": "73002Kernel / 73002", "Type": "pqr" }, .... .... ] } 在这里,我们可以在“表达式”中看到它应该打印“73003 / 73002”。 我无法想到如何解决这个问题。这里可以使用正则表达式吗?如何应用它?请推荐。 您可以更改 XML 并创建 JSON: import xml.etree.ElementTree as ET import pprint tree = ET.parse("eventConfig.xml") root = tree.getroot() # Find the values mycpu = root.find(".//event[@name = '$MyCpu']").get('val') mycpukernel = root.find(".//event[@name = '$MyCpuKernel']").get('val') # Create the new attribute value for expression with a f-string tex = f"{mycpu}/{mycpukernel}" # Set the new attribute value metric = root.find(".//metric[@expression]").set('expression', tex) ET.dump(root) 输出: <event_configuration family="21" version="2"> <pqr subtype="abc"> <event val="73002" name="$MyCpu" /> <event val="73003" name="$MyCpuKernel" /> <metric name="Ratio" expression="73002/73003" /> </pqr> </event_configuration>

回答 1 投票 0

在将其作为请求发送之前重写 SOAP xml

我需要在发出请求之前重写 SOAP XML 文件。 我可以使用静态文件发送请求并接收响应,没有任何问题,但我需要更改一些值 我尝试使用 ElementT...

回答 1 投票 0


使用 BeautifulSoup 或 Elementtree 将 XML 嵌套到数据框

我有一个代表产品交易的 XML 文件。我想将此数据转换为 pandas 数据框,但不知道如何迭代以获取所有产品级别数据。 这是一个...

回答 2 投票 0

根据预定义的 XML 结构,为 Excel 工作表中的每一行创建一个 XML 文件

我有以下 XML 文件,希望从 Excel 电子表格导入数据,并将其放置在某些元素(例如 eadid 和 titleproper)之间。我已经尝试过附加的Python代码,但是这个

回答 1 投票 0

在Python中使用signxml生成和验证签名时出现问题(命名空间和签名)

首先抱歉我的英语。我正在Python中使用signxml迈出第一步,从我看到的文章来看,它看起来很容易使用,但我无法正确签署文档,因为我

回答 1 投票 0

语法错误:在 Python 中解析 xml 文件时谓词无效

我正在编写一个python脚本,其目标是在匹配给定条件时更改xml标签的值:在这里,如果id是“皮卡丘”,我想将活动标签从true更改为false 当我...

回答 1 投票 0

查找并删除XML文件中的子元素

我是Python新手,所以这是我的问题: XML: C:\温度 <

回答 1 投票 0

如何在解析之前检查XML中的属性和标签是否存在?

我正在 python 中通过元素树解析 XML 文件,并将内容写入 cpp 文件。 不同标签的子标签内容会有所不同。例如,第一个事件标签具有标准...

回答 2 投票 0

如何将xml树放入单独的python文件中?

我使用 python 和 xml.etree.ElementTree 来构建 xml 文件。但只有基础树有超过 350 行,我想将其放在一个单独的文件中。我怎么做? 我的代码: 导入 xml...

回答 1 投票 0

如何为xml.etree中的属性设置命名空间

我想在 ElementTree 中设置属性的命名空间以获得以下结果。 我已经注册了名字...

回答 1 投票 0

使用 ELEMNTREE 和 Beautifulsoup 解析 XML 时面临内存问题

我正在尝试使用 beautifulsoup 和 elementree 解析和 XML,但它导致我的电脑崩溃,因为 XML 文件大小为 15,98,040KB,是否可以解析这么大的文件???或任何

回答 1 投票 0

Python etree 解析 html 文本失败(返回 NoneType)

为什么输出为“None”?它应该像“”或其他东西。 注意:仅在我的 Mac 上出现问题。我尝试过使用 p...

回答 1 投票 0

如何使用子子元素更新 xml 中的值

我想从给定的 XML 中更新下面提到的 2 个子子元素的值。 语言首选项__GET.jtl 我想从给定的 XML 更新下面提到的 2 个子子元素的值。 语言首选项__GET.jtl 假 </hashTree> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <name>saveConfig</name> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>false</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>false</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>false</xml> <fieldNames>true</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>true</responseDataOnError> <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> <hostname>true</hostname> <threadCounts>true</threadCounts> <sampleCount>true</sampleCount> </value> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <name>saveConfig</name> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>false</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>false</xml> <fieldNames>true</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>true</responseDataOnError> <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> <sentBytes>true</sentBytes> <url>true</url> <threadCounts>true</threadCounts> <idleTime>true</idleTime> <connectTime>true</connectTime> </value> </objProp> <stringProp name="filename">language-preferences__GET.jtl</stringProp> </ResultCollector> <hashTree/> 我编写了下面的代码来访问 ResultCollector 的子元素。但是,我无法找出浏览多个子子元素的更好方法。 tree = ET.parse(jmx_path) aggregate_samplers = tree.findall('.//ResultCollector[@testname="Aggregate Report"]') active_aggregate_samplers = [active_aggregate_sampler for active_aggregate_sampler in aggregate_samplers if active_aggregate_sampler.attrib['enabled'] == 'true'] for active_sampler in active_aggregate_samplers: for child in active_sampler: if child.tag == 'objProp': # < update **subresults** value as true> elif child.attrib['name'] == 'filename': child.text = str(uuid.uuid4()) + '_' + child.text // new file name # < update **filename** value as c82fa39b-5079-4838-b17c-fdf85f49fd5f_language-preferences__GET.jtl> 注意: 您的示例 xml 片段没有根元素! 答案: 如果 xml 已更正,您可以使用 findall() 找到您感兴趣的标签列表。然后更改相关列表元素的文本内容: import xml.etree.ElementTree as ET tree = ET.parse("hashTree.xml") root = tree.getroot() subres_list = root.findall(".//subresults") for sub in subres_list: sub.text = "true" # your new text for the list elements stringP_list = root.findall(".//stringProp") for stringP in stringP_list: stringP.text = "c82fa39b-5079-4838-b17c-fdf85f49fd5f_language-preferences__GET.jt"

回答 1 投票 0

如何替换 ElementTree 中的子元素

我想根据某些标准将子元素从一棵树替换到另一棵树。我可以使用理解来做到这一点吗?但是我们如何替换ElementTree中的元素呢?

回答 4 投票 0

有没有办法从 xml 文件中删除所有出现的具有特定属性的特定元素?

我有一堆 xml 文件,我想从中删除一个名为 uid 且属性 type = uri 的元素。还有元素 uid 的其他实例,但我只想删除带有 ...

回答 1 投票 0

lxml 元素的文本未显示

我在从 xml 文件中提取文本时遇到问题,但我的代码不允许我获得我期望获得的内容。 这是代码的一部分。 根 = etree.fromstring(xml) 标题 = root.findall('

回答 1 投票 0

ElementTree:使用 findall 提取属性值并将值附加到列表

想要从内部标签中提取名称属性的值,并且如果存在组值,则将组名称附加到名称标签。我尝试使用 xml.etree.ElementTree 提取,但我的代码......

回答 1 投票 0

在python中解析xml获取所有子元素

我已经解析了一个 XML 文件以获取其所有元素。我得到以下输出 [, 我已经解析了一个 XML 文件以获取其所有元素。我得到以下输出 [<Element '{urn:mitel:params:xml:ns:yang:vld}vld-list' at 0x0000000003059188>, <Element '{urn:mitel:params:xml:ns:yang:vld}vl-id' at 0x00000000030689F8>, <Element '{urn:mitel:params:xml:ns:yang:vld}descriptor-version' at 0x0000000003068A48>] 我需要仅为列表的每个元素选择 } 和 ' 之间的值。 这是我到目前为止的代码: import xml.etree.ElementTree as ET tree = ET.parse('UMR_VLD01_OAM_V6-Provider_eth0.xml') root = tree.getroot() # all items print('\nAll item data:') for elem in root: all_descendants = list(elem.iter()) print(all_descendants) 我怎样才能实现这个目标? {}中的文本是 XML 元素的限定名称 (QName) 的命名空间部分。据我所知,ElementTree中没有方法只返回本地名称。所以,你必须要么 通过字符串处理提取名称的本地部分,正如在对您的问题的评论中已经提出的那样, 使用 lxml.etree 代替 xml.etree.ElementTree 并在每个元素上应用 xpath('local-name()'), 或者提供没有命名空间的 XML 源。您可以使用 XSLT 剥离名称空间。 因此,给定此 XML 输入: <?xml version="1.0" encoding="UTF-8"?> <foo xmlns="urn:mitel:params:xml:ns:yang:vld"> <bar> <baz x="1"/> <yet> <more> <nested/> </more> </yet> </bar> <bar/> </foo> 您只能使用此程序变体打印本地名称列表: import xml.etree.ElementTree as ET tree = ET.parse('UMR_VLD01_OAM_V6-Provider_eth0.xml') root = tree.getroot() # all items print('\nAll item data:') for elem in root: all_descendants = [e.tag.split('}', 1)[1] for e in elem.iter()] print(all_descendants) 输出: ['bar', 'baz', 'yet', 'more', 'nested'] ['bar'] 带有 lxml.etree 和 xpath('local-name()') 的版本如下所示: import lxml.etree as ET tree = ET.parse('UMR_VLD01_OAM_V6-Provider_eth0.xml') root = tree.getroot() # all items print('\nAll item data:') for elem in root: all_descendants = [e.xpath('local-name()') for e in elem.iter()] print(all_descendants) 输出与字符串处理版本相同。 要从输入中完全剥离名称空间,您可以应用此 XSLT: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> </xsl:stylesheet> 然后你的原始程序输出: [<Element 'bar' at 0x04583B40>, <Element 'baz' at 0x04583B70>, <Element 'yet' at 0x04583BD0>, <Element 'more' at 0x04583C30>, <Element 'nested' at 0x04583C90>] [<Element 'bar' at 0x04583CC0>] 现在元素本身不具有名称空间。所以,你不必再剥它了。 您可以使用 xsltproc 应用 XSLT,然后您无需更改程序。或者,您可以在 python 中应用 XSLT,但这也需要您使用 lxml.etree。因此,程序的最后一个变体如下所示: import lxml.etree as ET tree = ET.parse('UMR_VLD01_OAM_V6-Provider_eth0.xml') xslt = ET.parse('stripns.xslt') transform = ET.XSLT(xslt) tree = transform(tree) root = tree.getroot() # all items print('\nAll item data:') for elem in root: all_descendants = list(elem.iter()) print(all_descendants)

回答 1 投票 0

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