PHP DOM alın

4 Cevap php

Yani HTML şöyle diyelim:

<select name="some_name">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3" selected="selected">3</option>
    <option value="4">4</option>
</select>

Ben Seçilen özellik = oradan "seçilmiş" olan seçeneği etiketi ayıklamak gerekir. Bunu nasıl yapabilirim? Şimdiye kadar bu var:

$string = file_get_contents('test.html');

include 'htmlpurifier-4.0.0-standalone/HTMLPurifier.standalone.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.0 Strict');
$purifier = new HTMLPurifier($config);
$string = $purifier->purify($string);

$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8">' . $string);
$dom->preserveWhiteSpace = false;

$num = 0;

$optionTags = $dom->getElementsByTagName('option');
foreach ($optionTags as $o) {
    if ($o->hasAttribute('selected')
        && 'selected' === $o->getAttribute('selected')) {
        $num = $o->nodeValue;
    }
}

echo $num;

Ve bu işe yaramazsa. $ Num hala sonradan sıfıra eşittir.

4 Cevap

Ben onun özelliğini item ile DOMNodeList 's öğeye erişmek için unutmadan, çünkü çalışmıyor inanıyorum.

Tüm uzunluğu boyunca bu yaklaşım, döngü deneyin DOMNodeList verdi. DOMNode geçerli öğenin dizin "selected" adında bir nitelik varsa kontrol

$num = 0;
$optionTags = $dom->getElementsByTagName('option');
for ($i = 0; $i < $optionTags->length; $i++ ) {
 if ($optionTags->item($i)->hasAttribute('selected') 
           && $optionTags->item($i)->getAttribute('selected') === "selected") {
     $num = $optionTags->item($i)->nodeValue;
 }
}

EDIT:

Benim tam kodu:

$dom = new DOMDocument();
$dom->load("C:\\test.htm");
$num = 0;
$optionTags = $dom->getElementsByTagName('option');
for ($i = 0; $i < $optionTags->length; $i++ ) {
  if ($optionTags->item($i)->hasAttribute('selected') 
         && $optionTags->item($i)->getAttribute('selected') === "selected") {
       $num = $optionTags->item($i)->nodeValue;
  }
}
echo "Num is " . $num;

Çıktı:

Num 3'dür

Nasıl simplexml ve XPath seçicileri kullanmaya ne dersiniz?

$xml = new SimpleXMLElement($htmlString);
$result = $xml->xpath('//option[@selected="selected"]');

$option = array_pop($result);
var_dump($option);

(Test, PHP 5.3.0 ve üzerinde çalışıyor)

Hata ayıklama sonraki adım $ string beklediğiniz değeri içerdiğini doğrulamak içindir. Yayınlanan orijinal kod doğrudur.

Bunu yaparak bunu elde etmek mümkün:

$xpath->query("//select[@name='foo']/option[@selected]");

Bu sadece seçili olarak işaretlenmiş düğümü döndü (seçili yoktu = "seçilmiş")