xpath 求差集问题

2014-07-07 21:12:06 +08:00
 node
.//div[@xyz]

.//div[@xyz]//div[@xyz]

想要第一个集合减第二个集合得到的差集,请问该怎么写xpath
3124 次点击
所在节点    程序员
11 条回复
imn1
2014-07-07 22:23:42 +08:00
这个有点难,因为你用的是相对路径,差集太大了

.//div[@xyz]//div[not(@xyz)]
这个能找出不带xyz属性的div子节点,但似乎不合你的题意
lins05
2014-07-07 22:32:31 +08:00
'.//div[@xyz]//*[not(self::div[@xyz])]'
binux
2014-07-07 22:35:18 +08:00
.//div[@xyz and not(//div[@xyz])]
node
2014-07-07 22:54:11 +08:00
@imn1 是啊,绞尽脑汁来着,不知道是xpath表达力实在太弱还是了解的不够

@lins05 这个应该是和 @imn1 的是一个意思

@binux 试了一下,好像不行
lins05
2014-07-07 22:58:35 +08:00
@node 我那个明显不和 @imn1 的不是一回事
imn1
2014-07-07 23:08:32 +08:00
查了一下,@lins05那个应该是正解,你先测试一下
imn1
2014-07-07 23:13:30 +08:00
node
2014-07-07 23:33:36 +08:00
@lins05 试过的,所有非div[@xyz]的都冒出来了
node
2014-07-07 23:48:28 +08:00
@imn1 嗯,多谢啦!感觉xpath还是偏向于直观使用的那一部分,可能灵活度偏弱,而我现在这个需求实现的途径可能类似于正则的前向环视,xpath里可能没找到途径
p.s.我是用的lxml.html的xpath,应该没什么问题吧

@imn1 @lins05 @binux 虽然问题还没解决,但还是多谢帮忙,感谢已送上
binux
2014-07-08 00:08:34 +08:00
哦,我理解错了
那应该是
.//div[@xyz and not(ancestor::div[@xyz])]
node
2014-07-08 00:29:29 +08:00
@binux 额,麻烦事就在这里,我之前试过这个,但有个问题是现在当前节点不一定是根节点,当前节点的祖先也有可能是div[@xyz],而这条语句里的ancestor貌似不是限定在当前节点下的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX