1

AND 演算子 '|' の使用方法 2 つのノード セットを計算するには? つまり、異なるタグ名を持つ 2 つの兄弟のデータを計算します。この場合: edition タグと edition2 タグの両方からのデータが必要です。試してみました '| そしてそれはうまくいきませんでした。

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>

パイソン:

>>> 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 私は答えの後にそれを機能させましたが、ユニオン演算子を使用してこれを行うことができたの値も選択したいです|

>>> 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']

単一の述語を使用してこれを行う方法と、self2 つの要素でここで行われているような表記法

/wikimedia/projects/project/editions/ *[self::edition or self::edition2]/text()

今、私たちは持ってい@srcますtext()か?

4

2 に答える 2

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:: 記法 (少なくとも属性については) を放棄します。

/wikimedia/projects/project/editions/ *[self::edition or self::edition2]
|
/wikimedia/projects/project/editions/img/@src

または select 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 )
于 2012-06-21T20:03:17.117 に答える
2

使用:

   /*/*/project/editions/*[not(self::img)]
|
   /*/*/project/editions/img/@src

またはXPath 2.0で使用

/*/*/project/editions
               /(*[not(self::img)] | img/@src)
于 2012-06-22T05:51:51.133 に答える