我的目标是检索所有包含特定文本的节点。
1-我可以检索包含有折叠请求的文本的节点:
[node for node in root.xpath('//*[contains(.,"Carte de chaleur")]') ]
Out[62]:
[<Element workbook at 0x1818bc76e88>,
<Element worksheets at 0x1819b886dc8>,
<Element worksheet at 0x1819c156488>,
<Element layout-options at 0x1819c1564c8>,
<Element title at 0x1818e9509c8>,
<Element formatted-text at 0x1819c156c48>,
<Element run at 0x1818e955048>,
<Element worksheet at 0x1819c156a88>,
<Element layout-options at 0x1819c156fc8>,
<Element title at 0x1818e9508c8>,
<Element formatted-text at 0x1819c1565c8>,
<Element run at 0x1818e955088>]但是,当我检查时,我只得到两个包含特定文本的元素。
[node for node in root.xpath('//*[contains(.,"Carte de chaleur")]') if node.text.__contains__("Carte de chaleur")]
Out[66]: [<Element run at 0x1818e955048>, <Element run at 0x1818e955088>]事实上,当我查找其中一个运行节点的路径时,我会发现所有的“工作簿”、工作表等等.实际上是它们的父节点。
run_node
Out[71]: <Element run at 0x1818e955048>
tree.getpath(run_node)
Out[72]: '/workbook/worksheets/worksheet[3]/layout-options/title/formatted-text/run[1]'那么,为什么这个xpath查询返回我要查找的节点的所有父节点(实际上只有2个运行节点)?
2-如果希望其属性包含特定文本的节点,则运行以下查询:
root.xpath('//@*[contains(.,"bold")]/..')
Out[86]:
[<Element format at 0x18199f56948>,
<Element format at 0x18199f56148>](这是逻辑,因为我想要包含特定属性节点的节点,所以我正在寻找这个属性节点的父节点)
奇怪的是,这一请求并没有产生同样的结果:
root.xpath('//*[contains(@*,"bold")]') 即使对我来说,最后一个意思是:“取根的任何子代元素,其任何属性都包含文本”粗体“(与前面的元素相同)。
3-可以使用变量检索属性包含不同值的节点吗?
对于一个变量,我可以这样做:
root('//*[@name=$var]', var="[Petal_length]") 但有没有办法做这样的事:
root('//*[@name=$var1]//title[@format=$var2]', var1="[Petal_length]",var2="bold") 编辑:这是原始文本https://ctxt.io/2/AACATwNVFA。Ps:如果有人知道如何分享一些超过1天的短信,那会对我有帮助。
发布于 2019-11-06 12:24:31
节点的字符串值是包含在其中的所有文本节点的连接,因此如果一个节点在其字符串值中包含特定的子字符串,那么它的所有祖先也会这样做。
给您的一个问题是,您希望输入返回什么?
<para>Carte <i>de</i> chaleur</para>您想要返回para元素,还是不返回呢?
如果您对此不被返回感到高兴,那么您本质上是说,所有文本都必须在单个文本节点中找到,所以您可以这样做
//*[text()[contains(.,"Carte de chaleur")]]如果您确实希望返回段落,那么您的要求是“查找包含文本的最低级别元素,而不包括它们的祖先”,那么您可能需要执行如下操作
//*[contains(.,"Carte de chaleur") and not(*[contains(.,"Carte de chaleur")])]我还没开始考虑效率.
https://stackoverflow.com/questions/58728296
复制相似问题