如何使用和运算符'|'计算2个节点集?换句话说,计算具有不同标签名称的2个兄弟姐妹的数据。在这种情况下:我想要版本和版本2标签的数据。我试过'|它不起作用。
XML:
<?xml version="1.0" encoding="utf-8"?>
<wikimedia>
<projects>
<project name="Wikipedia" launch="2001-01-05">
<editions>
<edition language="English">en.wikipedia.org</edition>
<edition language="German">de.wikipedia.org</edition>
<edition language="French">fr.wikipedia.org</edition>
<edition language="Polish">pl.wikipedia.org</edition>
<edition language="Spanish">es.wikipedia.org</edition>
<edition2 language="Spanglish">egs.wikipedia.org</edition2>
<img src="hello.gif">hello</img>
</editions>
</project>
<project name="Wiktionary" launch="2002-12-12">
<editions>
<edition language="English">en.wiktionary.org</edition>
<edition language="French">fr.wiktionary.org</edition>
<edition language="Vietnamese">vi.wiktionary.org</edition>
<edition language="Turkish">tr.wiktionary.org</edition>
<edition language="Spanish">es.wiktionary.org</edition>
<edition2 language="Spanglish">egs.wiktionary.org</edition2>
<img src="hello.gif">hello</img>
</editions>
</project>
</projects>
</wikimedia>
Python:
>>> wikixml.xpath('//edition/text() | edition2/text()')
['en.wikipedia.org', 'de.wikipedia.org', 'fr.wikipedia.org', 'pl.wikipedia.org', 'es.wikipedia.org', 'en.wiktionary.org', 'fr.wiktionary.org', 'vi.wiktionary.org', 'tr.wiktionary.org', 'es.wiktionary.org']
我在答案后得到了它,但我也想选择img/@src
的值
我设法使用union运算符|
>>> wikixml.xpath('//edition/text() | //edition2/text() | //img/@src')
['en.wikipedia.org', 'de.wikipedia.org', 'fr.wikipedia.org', 'pl.wikipedia.org', 'es.wikipedia.org', 'egs.wikipedia.org', 'hello.gif', 'en.wiktionary.org', 'fr.wiktionary.org', 'vi.wiktionary.org', 'tr.wiktionary.org', 'es.wiktionary.org', 'egs.wiktionary.org', 'hello.gif']
如何使用单个谓词和self
表示法,如此处使用两个元素
/wikimedia/projects/project/editions/ *[self::edition or self::edition2]/text()
现在我们有@src
和text()
?
答案 0 :(得分:4)
使用
wikixml.xpath('//edition/text() | //edition2/text()')
或更有效率
wikixml.xpath('//*[self::edition or self::edition2]/text()]
甚至更好
wikixml.xpath('/wikimedia/projects/project/editions/*[self::edition or self::edition2]/text()]
我也想要img的@src。现在如何使用自我符号来做到这一点 我们有@src和text()?
老实说,我不知道是否有办法使用上述表示法同时从元素轴和属性轴中进行选择。我对此表示怀疑。
您可以使用单个XPath,但放弃self :: notation(至少对于属性):
/wikimedia/projects/project/editions/ *[self::edition or self::edition2]
|
/wikimedia/projects/project/editions/img/@src
或选择edition
,edition2
以及包含src
属性的所有元素
/wikimedia/projects/project/editions/ *[self::edition or self::edition2 or attribute::src]
然后处理结果以获取src
这与你在 XPath 1.0 中所做的一样多 根据Dimitre Novatchev的建议, XPath 2.0 允许你这样写:
/wikimedia/projects/project/editions/(*[self::edition or self::edition2] | img/@src )
答案 1 :(得分:2)
使用强>:
/*/*/project/editions/*[not(self::img)]
|
/*/*/project/editions/img/@src
或在XPath 2.0中使用:
/*/*/project/editions
/(*[not(self::img)] | img/@src)