XPath Select 所有节点但不是“图形”节点
XPath Select all nodes but not `figure` node
我正在使用 scrapy
框架和 python 3.7.9
.
从 Britannica 网站抓取文章
我正在使用 XPath //section[@id='ref1'] //descendant::node()/text()
表达式来获取所有文本以及 figure
节点的文本,这些节点可以通过 //figure/descendant::node()
选择。
我想写一个表达式来获取除所有 figure
及其 descendants
之外的所有节点。
这是我尝试过的
//section[@id='ref1'] //descendant::node()[not(@figure[descendant::node()])]
但不工作。
应该这样做:
//section[@id='ref1']//*[not(self::figure)]
//section[@id='ref1']//descendant::node()[not(name()="figure")]
您可以使用 name()
访问标记名
更新:
如果您不想要 figure 的子元素,请使用:
//section[@id='ref1']//descendant::node()[not(name()="figure") and not(ancestor::figure)]
I want to write an expression to get all the nodes except all figure
and its descendants.
从问题的文本来看,您实际上想要所有文本节点,它们是section[@id='ref1']
的后代除了那些是任何figure
元素的后代。
一个选择这些节点的 XPath 表达式是:
//section[@id='ref1']//*[not(self::figure)]/text()
我正在使用 scrapy
框架和 python 3.7.9
.
我正在使用 XPath //section[@id='ref1'] //descendant::node()/text()
表达式来获取所有文本以及 figure
节点的文本,这些节点可以通过 //figure/descendant::node()
选择。
我想写一个表达式来获取除所有 figure
及其 descendants
之外的所有节点。
这是我尝试过的
//section[@id='ref1'] //descendant::node()[not(@figure[descendant::node()])]
但不工作。
应该这样做:
//section[@id='ref1']//*[not(self::figure)]
//section[@id='ref1']//descendant::node()[not(name()="figure")]
您可以使用 name()
访问标记名更新:
如果您不想要 figure 的子元素,请使用:
//section[@id='ref1']//descendant::node()[not(name()="figure") and not(ancestor::figure)]
I want to write an expression to get all the nodes except all figure and its descendants.
从问题的文本来看,您实际上想要所有文本节点,它们是section[@id='ref1']
的后代除了那些是任何figure
元素的后代。
一个选择这些节点的 XPath 表达式是:
//section[@id='ref1']//*[not(self::figure)]/text()