1

現時点では、ページから特定のドメインを指すすべてのリンクを取得するために、次のようなことを行っています。

var links = entryNode.SelectNodes(".//a[contains(@href,'site.com')]");

これを変更して、a指定した任意のドメインを指す要素を取得できるようにします。例えば:

var links = entryNode.SelectNodes(".//a[contains(@href,'site.com') | contains(@href,'othersitesite.com') | contains(@href,'thirdsite.com')]");

1 つの XPath 式でこれを行う方法はありますか?

ありがとうございました。

4

2 に答える 2

1

使用:

.//a[contains(@href,'site.com')
   or
     contains(@href,'othersitesite.com')
   or
     contains(@href, 'thirdsite.com')
     ]
于 2012-08-26T21:17:09.423 に答える
0

の前後にある文字列の部分を完全に一致させたいという要件があると仮定すると(つまり、サブドメインも一致させたい)、次の解決策が機能します。///

.//a[contains(' site.com othersitesite.com thirdsite.com ', 
             concat(' ', substring-before(substring-after(
                                          concat(@href, '/'), '//'), '/'), ' '))]

これは、それぞれがスペースで囲まれたすべての可能なターゲット文字列を含む大きな文字列で、スペースで囲まれたターゲット文字列を探しているためです。

具体例を使ってみましょう。次のドキュメントがあるとします。

<r>
    <a href="http://google.com"/>
    <a href="http://yahoo.com/"/>
    <a href="http://bing.com"/>
    <a href="http://altavista.com"/>
</r>

そして、 google.comyahoo.com、およびaltavista.com (現在のノードに対して) のアンカーを一致させたいと考えています。次の式はそれを実現します。

.//a[contains(' google.com yahoo.com altavista.com ', 
             concat(' ', substring-before(substring-after(
                                          concat(@href, '/'), '//'), '/'), ' '))]

上記の要件を満たしていない可能性があります。その場合は、@ Dimitreの(良い)回答を使用してください。このソリューションは、独自の要件をさらに理解するのにも役立つ可能性のある代替手段として提示されているにすぎません。

于 2012-08-27T05:42:38.377 に答える