2011-11-06 2 views
25
가능한 중복

:
How to extract a node attribute from XML using PHP's DOM ParserXPath를 get 및 속성 값

가 어떻게 HTML 태그 값을 추출 할 수 있습니까?

HTML :

<input type="hidden" name="text1" id="text1" value="need to get this"> 

PHP :

$homepage = file_get_contents('http://www.example.com'); 
$doc = new DOMDocument; 
$doc->preserveWhiteSpace = false; 
@$doc->loadHTML($homepage); 
$xpath = new DOMXpath($doc); 
$filtered = $xpath->query("//input[@name='text1']"); 

가 어떻게 "이 얻을 필요"로 value을받을 수 있나요?

업데이트 :

나는 그것이 작동하고 너무 다른 사람을 도움이되기를 바랍니다 얻었다. http://www.php.net/manual/en/domelement.getattribute.php

var array_result = arrray(); 
foreach (filtered as $key => $value){ 

    $array_result[] = $value->getAttribute('ID'); 

} 
+0

'foreach ($ filtered as $ element) {...}'를 통해 필터링 된 요소를'$ filtered '해야하고 노드 값/속성을 직접 확인해야합니다. – Smamatti

+5

하나의 옵션은 덜 사용되는'evaluate()'메소드로, 텍스트 나 빈 문자열을 반환합니다 :'$ xpath-> evaluate ('string (// input [@ name = "text1"]/@ value) ');' – salathe

+4

이것은 다른 질문과 실제로 중복되지 않습니다. 이것은 하나의 크로스 - 환경 xpath 솔루션이고, 다른 하나는 PHP와 관련이있다. –

답변

34

XPath는 $xpath->query("//input[@name='text1']/@value");으로 값 속성을 가져올 수 있습니다. 그런 다음 속성 노드의 노드 목록을 반복하고 각 속성 노드의 $value 속성에 액세스 할 수 있습니다.

+2

그냥 closevote하시기 바랍니다. 그것의 사본 – Gordon

9

봐 DOM의 방법 : 위의 코드 후 나는하여 값을 얻었다 다음 xpath를 사용하십시오.

//input[@name='text1']/@value 

그러나 xpath는 문자열을 리턴하지 않고 노드를 리턴합니다. 당신은 노드의 value 원하므로 PHP가 규칙을 따른다면, 그 코드는 다음과 같습니다

$xpath->query("//input[@name='text1']/@value")->value; 

목적을 배우기 위해, 당신은 항상 value 속성을 확인 명심하십시오. 같은 요소의 이름을 원하는 경우에 따라서, 당신은 사용하십시오 :

$xpath->query("//input[@name]/@name")->value; 

당신은 아마 확인 쿼리뿐만 아니라 value 속성을 쿼리하기 전에 null이 아닌 값을 반환하고 싶습니다.

7

나는이에 대한 PHP 구문에 익숙하지 해요,하지만 값을 선택하는 당신이하고자 속성

echo $filtered->item(0)->getAttribute('value'); 
+0

작동하지 않습니다. 오류'정의되지 않은 속성 : DOMNodeList :: $ value' –

+1

이 나를 위해 작동합니다 : $ res = $ xpath-> query ("// input [@name]/@ name"); echo $ res-> item (0) -> nodeValue; – TomoMiha

+0

가장 간단한 방법은'evaluate'을 사용하는 것입니다. https://stackoverflow.com/a/45010743/287948 –