2012-03-22 5 views
4

コード:XPATH - この部分をどのように選択するのですか?ページの

<div class='container'> 
<p> 
    <b>Address:</b> Some address<br /> 
    <b>Phone:</b> phone1, phone2<br /> 
    <b>E-mail: </b><a href='mailto:somemail' >somemail</a><br /> 
    <b>Site:</b><a href='somesite'>somesite</a> 
</p>  
</div> 

私はXPATHを使用して</b><br />前にテキストを選択する必要があります。私は「いくつかのアドレス」または「のphone1、phone2の」などを取得する必要があります。この場合 は

「いくつかのアドレスは、」私が試した$ var2の

中で$ var1の 「のphone1、phone2の」する必要があります.//*[@class="container"]/p/text()[1]で動作しませんでした。

+0

あなたもsomemailとsomesiteを取得したいですか?技術的に彼らはbとbrの間にないからです。 – Gordon

+0

はい、私もそれらを選択し、それらを別の変数に入れたい – RhymeGuy

+0

FireBugを使って、HTMLペインの上部にあるバーの要素のxpathを見ることができます。 –

答えて

3

例えば、これは、Bの要素ツリーまたは空内にない(クラス属性「コンテナ」とDIVの)P要素ツリー内のテキストノードを選択するこれ

/div[@class="container"]/p/descendant-or-self::text()[ 
    not(ancestor::b) 
    and normalize-space(.) != "" 
] 

を試しますこれは、 "いくつかのアドレス"、

  • "のphone1、phone2の"
  • "somemail" と
  • "somesite" あなた

    • を与えるだろう。

      Demo

  • はまた、この XPath tutorialを見ています。

    +0

    YEY!あなたは私のためのデモを行う必要はなかった:)今は配列http://codepad.org/Li1B2br7の値を入れて問題がある – RhymeGuy

    +0

    私の間違いは、私はforeachループの外に$ someArrayを置くことを忘れて.. – RhymeGuy

    0

    私が到達できる最も近いです:

    '//div[@class="container"]/p/text()[preceding::b[contains(text(),"Address")] and following-sibling::b[contains(text(),"Phone")]]' 
    

    OR @Gordonが

    '//div[@class="container"]/p/text()[following::b[contains(text(),"Phone")] and normalize-space(.)!=""]' 
    

    を示唆するように:)

    +0

    ありがとう!私は受け入れられた答えとしてゴードンの解決策に投票しました:) – RhymeGuy

    関連する問題