gpt4 book ai didi

python - 如何用字符串替换 lxml 中的元素

转载 作者:行者123 更新时间:2023-12-01 09:15:35 27 4
gpt4 key购买 nike

我试图在 lxml 和 python 中弄清楚如何用字符串替换元素。

在我的实验中,我有以下代码:

from lxml import etree as et

docstring = '<p>The value is permitted only when that includes <xref linkend=\"my linkend\" browsertext=\"something here\" filename=\"A_link.fm\"/>, otherwise the value is reserved.</p>'

topicroot = et.XML(docstring)
topicroot2 = et.ElementTree(topicroot)
xref = topicroot2.xpath('//*/xref')
xref_attribute = xref[0].attrib['browsertext']

print href_attribute

结果是:“这里有东西”

这是我在这个小示例中寻找的浏览器文本属性。但我似乎无法弄清楚如何用我在此处捕获的属性文本替换整个元素。

(我确实认识到,在我的示例中,我可能有多个外部参照,并且需要构建一个循环才能正确地遍历它们。)

执行此操作的最佳方法是什么?

对于那些想知道的人,我必须这样做,因为该链接实际上指向一个由于我们不同的构建系统而不存在的文件。

提前致谢!

最佳答案

试试这个(Python 3):

from lxml import etree as et

docstring = '<p>The value is permitted only when that includes <xref linkend=\"my linkend\" browsertext=\"something here\" filename=\"A_link.fm\"/>, otherwise the value is reserved.</p>'

# Get the root element.
topicroot = et.XML(docstring)
topicroot2 = et.ElementTree(topicroot)

# Get the text of the root element. This is a list of strings!
topicroot2_text = topicroot2.xpath("text()")

# Get the xref elment.
xref = topicroot2.xpath('//*/xref')[0]
xref_attribute = xref.attrib['browsertext']

# Save a reference to the p element, remove the xref from it.
parent = xref.getparent()
parent.remove(xref)

# Set the text of the p element by combining the list of string with the
# extracted attribute value.
new_text = [topicroot2_text[0], xref_attribute, topicroot2_text[1]]
parent.text = "".join(new_text)

print(et.tostring(topicroot2))

输出:

b'<p>The value is permitted only when that includes something here, otherwise the value is reserved.</p>'

关于python - 如何用字符串替换 lxml 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com