php
  • xpath
  • 2011-01-19 6 views 2 likes 
    2

    의 값을 얻으려면?href 속성의 값을 얻는 방법은 무엇입니까? 다음과 같은 경우에 href 속성의 값을 취득하는 방법의 XPath의 도움으로

    <a href="http://foo.com">a wrong one</a> 
    <a href="http://example.com">the right one</a> 
    <a href="http://boo.com">a wrong one</a> 
    

    이다 (단지 바로 하나의 URL을 잡아) 링크에 특정 텍스트가있는 경우 href 속성

    $xml = '<html><a href="http://foo.com">a wrong one</a>' 
         . '<a href="http://example.com">the right one</a>' 
         . '<a href="http://boo.com">a wrong one</a></html>'; 
    $tree = simplexml_load_string($xml); 
    $nodes = $tree->xpath('//a[text()="the right one"]'); 
    $href = (string) $nodes[0]['href']; 
    

    답변

    0
    "//a[@href='http://example.com']" 
    
    0

    나는 속성을 선택합니다 simple_html_dom.php

    $oHtml = new simple_html_dom(); 
    $oHtml->load($sBody) 
    foreach($oHtml->find('a') as $oElement) { 
        echo $oElement->href 
    } 
    
    +0

    * "XPath의 도움을 받아"*로 시작하는 질문은 아닙니까? –

    4

    이 같은 오픈 소스 클래스를 사용하십시오 나는 이것이 최선의 해결책이라고 생각한다. 각각을 배열 요소로 사용할 수 있습니다.

    $String= ' 
    <a href="http://foo.com">a wrong one</a> 
    <a href="http://example.com">the right one</a> 
    <a href="http://boo.com">a wrong one</a> 
          '; 
    
    $array=get_all_string_between($String,'href="','">'); 
    print_r($array);//just to see what is inside the array 
    
    //now get each of them 
    foreach($array as $value){ 
    echo $value.'<br>'; 
    } 
    
    function get_all_string_between($string, $start, $end) 
    { 
        $result = array(); 
        $string = " ".$string; 
        $offset = 0; 
        while(true) 
        { 
         $ini = strpos($string,$start,$offset); 
         if ($ini == 0) 
          break; 
         $ini += strlen($start); 
         $len = strpos($string,$end,$ini) - $ini; 
         $result[] = substr($string,$ini,$len); 
         $offset = $ini+$len; 
        } 
        return $result; 
    } 
    
    +0

    +1 좋은 점은 DOMXPath가 DOMAttr 객체를 반환 할 수 있다는 것을 알지 못했습니다. :) – netcoder

    +0

    @netcoder 고마워 .. 확실히 할 수 :). –

    +0

    +1 * "href 속성의 값을 얻는 방법"* –

    0

    :

    +2

    [text() = "right one"]보다 [. = "right one"]을 사용하십시오. 왜냐하면 값이 더 짧고 값에 여러 텍스트 노드로 나누는 주석이있을 수 있기 때문입니다. –

    +0

    +1 유용한 제안 – scoffey

    +0

    그러나 이것은 '@ href'가 아니라'a' 엘리먼트를 선택합니다. –

    1

    : 여기에 SimpleXML을을 사용하여 전체 예제

    "//a[text()='the right one']/@href" 
    
    +0

    정말요? 사이의 문자열? RegExp로 파싱하는 것보다 덜 유용할까요? –

    +0

    이것은 내 문제를 해결 한 완벽한 대답입니다. –

    관련 문제