将元素内容提取为列表,并使用XPath 1.0排除子元素

将元素内容提取为列表,并使用XPath 1.0排除子元素,xpath,xpath-1.0,Xpath,Xpath 1.0,我目前正试图提取listrings als元素列表,但我 要排除表单元素吗 到目前为止,由于中间有a元素,我没有返回两个项目 //*[@id=“quickPromoBucketContent”]///li[后代::形式]/text() HTML: 我方5%的股份来自英国昂格博特·冯·乌格林集团有限公司,我方1%的股份来自英国迈赫勒汽车公司(mehrere Auto Handy Halterung aus dem Angebot von UGREEN GROUP LIMITED) 埃尔本!您的

我目前正试图提取
li
strings als元素列表,但我 要排除
表单
元素吗

到目前为止,由于中间有
a
元素,我没有返回两个项目

//*[@id=“quickPromoBucketContent”]///li[后代::形式]/text()

HTML:


  • 我方5%的股份来自英国昂格博特·冯·乌格林集团有限公司,我方1%的股份来自英国迈赫勒汽车公司(mehrere Auto Handy Halterung aus dem Angebot von UGREEN GROUP LIMITED) 埃尔本!您的电话号码是49DFYWAQ。(Teilnahmebedingungen)
  • 我方5%的股份将由我方自行承担。我方将与英国欧格林集团有限公司合作! 代码为5BWVW4YN和der Kasse ein。(Teilnahmebedingungen)
  • 购买优惠券,购买亚马逊10%的产品。

从要查询的示例代码中猜测

  • 下面的所有li元素和属性为
    id=“quickPromoBucketContent”
  • 有形体后代的
  • 从中获取所有子节点/子节点的文本
试着这样做:

//*[@id="quickPromoBucketContent"]//li[descendant::form]/descendant-or-self::*/text()

后代或自身:*和
后代::
有点冗长。您可以将其缩短为
//*[@id=“quickPromoBucketContent”]///li[.//form]///text()
,OP还说“但我想排除form元素”,因此我认为您需要向
text()
添加一个谓词。示例:
//*[@id=“quickPromoBucketContent”]//li[.//form]//text()[not(祖先::form)]
@DanielHaley谢谢。是的,查询可以缩短。但是,我对有关表单元素的评论的解释不同。OP在这方面不是100%清楚。谢谢,这是有效的@DanielHaley你能解释一下有什么区别吗?我忘了:我还想排除所有具有
target=“AmazonHelp”
//*[@id=“quickPromoBucketContent”]///li[.//form]//text()[不是(祖先::form)和不是(祖先::a[@target,“AmazonHelp”])]的元素,即使
元素是
li
元素的一部分,也有可能排除
后面的所有内容吗?您想将具有后代
形式的
li
排除在外,还是只包括具有后代
形式的
li
排除在外?请澄清。我只想包括那些有一个的。
//*[@id="quickPromoBucketContent"]//li[descendant::form]/descendant-or-self::*/text()