使用XPath、etree和python提取值

2024-04-19 18:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用XPath、Python和etree提取一个值。我对收到的.xml文件没有任何影响,我认为它似乎是无效的。在

我的方法已经提取了要检查的文本节点对象。在

# This is the tag.
textTag = lastExportTree.xpath("//TEXT_NODE[@PROPERTY = '%s']/TEXT[@ID = '%s']" % (key, id[1]))

# This is a part of the xml. I already have the text node I want to examine.
<TEXT ID="1001" STATE="5" LOCKED="false"><SYSTEMMESSAGE>CALBUY</SYSTEMMESSAGE>Hiho</TEXT>
<TEXT ID="1002" STATE="1" LOCKED="false"/>
<TEXT ID="1003" STATE="5" LOCKED="false">Stack</TEXT>
<TEXT ID="1004" STATE="1" LOCKED="false">Overflow</TEXT>

如果要访问ID=“1003”的内容,只需键入:

^{pr2}$

但是ID=“1001”的标记也包括SYSTEMMESSAGE标记。 我怎样才能访问“HiHo”内容?(文本标签.text不起作用!)我收到的是无效的xml吗?在

非常感谢你的回答!在


Tags: thetext标记文本idfalse内容is
2条回答

我以前也遇到过这个问题,这就是我们的结局。在我们的例子中,我们感兴趣的是在元素的所有非脚本和非样式子元素中查找文本。在

# Just to pre-compile our XPath. This will get all the text from this element from
# each of the child elements that aren't 'script' or 'style'
textXpath = etree.XPath(
    '(.|.//*[not(name()="script")][not(name()="style")])/text()')

# If instead you don't want to include the current element:
# textXpath = etree.XPath(
#   './/*[not(name()="script")][not(name()="style")]/text()')

results = ''.join(textXpath(textTag))

它可能不是最漂亮的代码块,但这正是我们所求助的。在

假设您正在向我们显示lastExportTree下的节点,则应该这样做:

lastExportTree.xpath('TEXT[@STATE="5" and @LOCKED="false" and SYSTEMMESSAGE]/text()')[0]

这意味着查找所有名为TEXT的子节点,这些子节点具有给定的状态和锁定的属性,以及一个SYSTEMMESSAGE子元素。在

相关问题 更多 >