elementtree 相关问题

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

用于创建 XML 的 Python 脚本

我正在准备一个Python脚本来创建一个XML,例如: 1.0 ...

回答 1 投票 0

元素树python中带有属性的xpath表达式

导入 xml.etree.ElementTree 作为 ET 树:ET = ET.parse(文件) tree.find('.//ns1:tag/@someattribute', ns) 导致 {KeyError}'@',据我所知,xpath 表达式是正确的,是否有...

回答 1 投票 0

如何在XML文件中插入处理指令?

我想使用 ElementTree (Python 3.8) 在 XML 文件中的根元素之前添加 xml 样式表处理指令。 您可以在下面找到我用来创建 XML 文件的代码 导入 xml.e...

回答 2 投票 0

如何从存储为字符串的.xml中提取数据/节点?

我有一个字符串格式的.xml xmlString,如下所示 瓮:内容项目:7WBG-8H88-Y898-B277-00000-00-1 <

回答 1 投票 0

使用 xml.etree.ElementTree 添加节点到 XML 时如何添加命名空间?

我有下一个代码来解析一个 XML 字符串,然后向 XML 添加一个新节点。但你可以看到我的代码只能添加w...

回答 2 投票 0

在Python ElementTree中,如何获取树中元素的所有祖先的列表?

我需要“get_ancestors_recursively”函数。 样本运行可以是 >>> 转储(tr) >>>

回答 4 投票 0

如何在特定级别合并两个xml文件

我想使用Python合并两个xml文件: 文件1.xml 15 ...

回答 1 投票 0

有没有办法从 ElementTree 元素获取行号

所以我使用Python 3.2.1的cElementTree解析一些XML文件,在解析过程中我注意到一些标签缺少属性信息。我想知道是否有任何简单的方法

回答 5 投票 0

元素树仅读取根元素,而不读取某些 XML 文件中的内容

我需要制作一个Python脚本来获取相机配置并检查OSD中写入的内容。我编写了直接从它们下载 XML 文件的代码,然后对其进行解析,以便

回答 1 投票 0

使用 ElementTree.tostring 的 default_namespace 参数会引发错误

我想使用 ElementTree 修改 XML 文档并保持其可比性,我希望新文件中具有与旧文件中相同的命名空间前缀。 但是,default_namespace= 参数...

回答 1 投票 0

xml.etree.ElementTree 的 XML 放置问题

我正在使用 Python 的 xml.etree.ElementTree 生成 XML,但遇到了 XML 子元素出现在与预期不同的标签下的问题。 我的函数如下所示: 定义

回答 1 投票 0

如何告诉lxml.etree.tostring(element)不要在python中写命名空间?

我有一个巨大的 xml 文件(1 Gig)。我想将一些元素(条目)移动到具有相同标题和规范的另一个文件。 假设原始文件包含带有标签 的条目 我有一个巨大的 xml 文件(1 Gig)。我想将一些元素(条目)移动到具有相同标题和规范的另一个文件。 假设原始文件包含带有标签 <to_move>: 的条目 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE some SYSTEM "some.dtd"> <some> ... <to_move date="somedate"> <child>some text</child> ... ... </to_move> ... </some> 我使用 lxml.etree.iterparse 来迭代该文件。工作正常。当我找到带有标签 <to_move> 的元素时,我们假设它存储在变量 element 中,我这样做 new_file.write(etree.tostring(element)) 但这会导致 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE some SYSTEM "some.dtd"> <some> ... <to_move xmlns:="some" date="somedate"> # <---- Here is the problem. I don't want the namespace. <child>some text</child> ... ... </to_move> ... </some> 所以问题是:如何告诉 etree.tostring() 不要写 xmlns:="some"。这可能吗?我在 lxml.etree 的 api 文档中苦苦挣扎,但找不到满意的答案。 这是我找到的etree.trostring: tostring(element_or_tree, encoding=None, method="xml", xml_declaration=None, pretty_print=False, with_tail=True, standalone=None, doctype=None, exclusive=False, with_comments=True) 将元素序列化为其 XML 的编码字符串表示形式 树。 对我来说tostring()的每一个参数似乎都没有帮助。有什么建议或者更正吗? 我经常抓住一个命名空间来为它创建一个别名,如下所示: someXML = lxml.etree.XML(someString) if ns is None: ns = {"m": someXML.tag.split("}")[0][1:]} someid = someXML.xpath('.//m:ImportantThing//m:ID', namespaces=ns) 您可以执行类似的操作来获取名称空间,以便创建一个正则表达式,该正则表达式将在使用 tostring 后清理它。 或者您可以清理输入字符串。找到第一个空格,检查其后面是否有xmlns,如果有,则删除整个xmlns位直到下一个空格,如果没有则删除该空格。重复此操作,直到不再有空格或 xmlns 声明。但不要超过第一个>。 这更多是对“unutbu”答案的评论,其中需要清理命名空间的建议,但没有给出示例。这可能就是您正在寻找的... from lxml import objectify objectify.deannotate(root, cleanup_namespaces=True) 有一种方法可以使用 XSLT 删除名称空间: import io import lxml.etree as ET def remove_namespaces(doc): # http://wiki.tei-c.org/index.php/Remove-Namespaces.xsl xslt='''<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="no"/> <xsl:template match="/|comment()|processing-instruction()"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:apply-templates select="@*|node()"/> </xsl:element> </xsl:template> <xsl:template match="@*"> <xsl:attribute name="{local-name()}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:template> </xsl:stylesheet> ''' xslt_doc = ET.parse(io.BytesIO(xslt)) transform = ET.XSLT(xslt_doc) doc = transform(doc) return doc doc = ET.parse('data.xml') doc = remove_namespaces(doc) print(ET.tostring(doc)) 产量 <some> <to_move date="somedate"> <child>some text</child> </to_move> </some> 这是一个古老的问题,但由于 13 年后 lxml 仍然没有内置这个明显的函数,处理它的最简单方法是使用正则表达式: def get_text(element: etree.Element) -> str: s = etree.tostring(element).decode() if m := re.match(r'^<(\w*)[^>]*>((.|\n)+)<\/\1>', s): return m.group(2).strip() return s 这会剥离整个包含元素 <description blah blah blah><div>What we want</div><p>more stuff</p></description> 并仅返回 <description> 内的标记。为了安全起见,它会保存开始元素标记以在末尾进行匹配(使用 \1 反向引用),但寻找结束 <\ 效果很好,因为贪婪匹配会跳过内容中嵌入的所有其他元素。 如果匹配失败,引发 ValueError 可能会更好,但这只会返回原始的丑陋字符串、命名空间和所有内容。

回答 4 投票 0

如何只打印etree中某个元素的开始标签?

给定 etree 中的元素,我想仅打印开始标签。这对于调试非常有用。 例如: >>> 从 lxml 导入 etree >>> elem = etree。

回答 1 投票 0

lxml.etree 元素在副本上删除命名空间

我正在使用 lxml.etree 库将 XML 文件拼接在一起,并且命名空间在写入时被删除。 输入.xml ...

回答 1 投票 0

使用 ElementTree 库解析 KML/XML

我想利用 ElementTree python 库解析 SimpleData 标签中找到的“ID2”名称属性。 ...

回答 1 投票 0

XML elementTree 在换行符后截断文本 ( )在Python中

我正在解析文本,其中一个孩子的文本如下所示: ” 相互扩散,在存在化学势梯度的情况下发生并导致 m...

回答 1 投票 0

强制 ElementTree 使用结束标签

而不是: 在 XML 文件中,我需要: 一个丑陋的解决方法是将空格写入文本(而不是空的条...

回答 2 投票 0

Pyrhon 解析 XML 删除 XML 标头

我有以下代码来编辑XML 导入 xml.etree.ElementTree 作为 ET 数据 = b'xxx...

回答 1 投票 0

在文档开头添加评论

使用 ElementTree,如何在 XML 声明下方和根元素上方放置注释? 我尝试过 root.append(comment),但这将注释作为 root 的最后一个子项。我可以吗

回答 3 投票 0

使用 <b> 标签将 XML 解析为字符串

使用 .findall('string') 时我只得到 value1 ,其余的被忽略。如何获得完整价值? xml文件输入: 值1 值2 使用 .findall('string') 时我只得到 value1 ,其余的被忽略。如何获得完整价值? xml文件输入: <resources> <string name="key">value1 <b>value2</b>. value3</string> </resources> Python代码: import xml.etree.ElementTree as ET tree = ET.parse(xml_file) root = tree.getroot() for string in root.findall('string'): name = string.get('name') value = string.text 你可以用 itertext() 来做到这一点 for string in root.findall('string'): value = ''.join(string.itertext()) print(value) # output: # value1 value2. value3

回答 1 投票 0

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