为什么我不能将 lxml.etree._ElementUnicodeResult 转换为字符串?

Why can't I cast an lxml.etree._ElementUnicodeResult to a string?

print(type(players[1]))


for player in players:
    player = str(player)

print(type(players[1]))

输出是:

 <class 'lxml.etree._ElementUnicodeResult'>
 <class 'lxml.etree._ElementUnicodeResult'>

我需要将这个 ElementUnicode 对象转换成一个字符串,以便我可以在其上调用子字符串,但是这个 for 循环没有这样做。当我将它转换为字符串并同时调用 substring 时,控制台显示:str object has no object substring, which makes no sense.

 str(players[i]).substring()

关于为什么会出现这种情况以及我如何绕过此对象调用子字符串的任何想法?

如果您是 运行 python2,请尝试:unicode(players[i])

_ElementUnicodeResult 转换为 str 不是问题。完整演示:

from lxml import etree

doc = """
<root>
 <player>ABC</player>
 <player>DEF</player>
</root>"""

root = etree.fromstring(doc)
players = root.xpath("player/text()")

print(type(players[1]))

# Cast each player to a plain string 
players = [str(p) for p in players]

print(type(players[1]))

输出:

<class 'lxml.etree._ElementUnicodeResult'>
<class 'str'>

题目中,你有如下代码:

for player in players:
    player = str(player)

print(type(players[1]))

这不会改变 for 循环之外的任何内容。 type(players[1]) 会和以前一样。

另外,str确实没有substring属性。 XPath 有一个 substring() 函数。也许这就是您的想法?