2011-11-06 13 views
25

Powiel możliwe:
How to extract a node attribute from XML using PHP's DOM ParserXPath uzyskać wartość atrybutu w PHP

Jak wyodrębnić wartość znacznika 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']"); 

Jak uzyskać value być "trzeba uzyskać ten"?

Aktualizacja:

mam to pracę i mam nadzieję, że to pomoże innym też. Po powyższym kodzie mam wartość przez:

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

Będziesz musiał zapętlić przefiltrowane elementy '$ filter' za pomocą' foreach ($ filter as $ element) {...} 'i sprawdzić wartości/atrybuty węzła osobiście. – Smamatti

+5

Jedną z opcji jest mniej używana metoda "evaluate()", która zwraca tekst lub pusty ciąg: '$ xpath-> evaluate ('string (// input [@ name =" text1 "]/@ value) '); ' – salathe

+4

To nie jest tak naprawdę _exact_ duplikat drugiego pytania. Ten jest naprawdę rozwiązaniem Xpath między różnymi środowiskami, a drugi jest specyficzny dla PHP. –

Odpowiedz

34

XPath może wykonać zadanie uzyskania atrybutu wartości z $xpath->query("//input[@name='text1']/@value");. Następnie możesz przetestować listę węzłów atrybutów i uzyskać dostęp do właściwości $value każdego węzła atrybutu.

+2

po prostu closevote proszę. jest duplikatem – Gordon

7

nie jestem zaznajomiony ze składnią PHP do tego, ale aby wybrać wartość atrybutu byś użyj następującej ścieżki x:

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

Jednak xpath nie zwraca ciągów, zwraca węzły. Chcesz value węzła, więc jeśli PHP następująco konwencję, że kod będzie:

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

w celach edukacyjnych, należy pamiętać, że zawsze sprawdzić właściwość value. Więc jeśli chciał nazwisko tego samego elementu, można użyć:

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

Prawdopodobnie chcesz, aby upewnić się, że kwerenda zwraca wartość niezerową przed kwerend właściwość value również.

+0

Nie działa. błąd 'Niezdefiniowana właściwość: DOMNodeList :: $ value' –

+1

działa to dla mnie: $ res = $ xpath-> query (" // input [@name]/@ name "); echo $ res-> item (0) -> nodeValue; – TomoMiha

+0

Najprostszym sposobem jest użycie 'oceny', zobacz https://stackoverflow.com/a/45010743/287948 –

Powiązane problemy