Tüm etiketleri ihmal HTML belgesinin PHP XPATH.

3 Cevap php

Ben XPATH ile bir HTML belgesi ayrıştırma ve ben tüm iç html etiketleri tutmak istiyorum.

Söz html birçok liste unsurları ile bir sırasız liste.

<ul id="adPoint1"><li>Business</li><li>Contract</li></ul>

Ben şu PHP kodu kullanarak belgeyi ayrıştırma am

$dom = new DOMDocument();
@$dom->loadHTML($output);
$this->xpath = new DOMXPath($dom);
$testDom = $this->xpath->evaluate("//ul[@id='adPoint1']");
$test = $testDom->item(0)->nodeValue;
echo htmlentities($test);

Nedense çıkış daima ondan ihmal html etiketleri vardır. Ben XPATH bu şekilde kullanılmak üzere tasarlanmıştır, ancak bu çevrede yine orada değildi çünkü bu olduğunu varsayalım?

Ben zaten bir sorun olmadan sayfasında (tek a href elementler) diğer alanlarını ayrıştırmak için kullanmak gibi ben gerçekten XPath kullanarak devam etmek istiyorum.

EDIT: Ben UL alt öğeleri yineleme tarafından veri almak için daha iyi bir yol olduğunu biliyoruz. Orada ben de (javascript blok) ayrıştırmak istediğiniz sayfanın daha karmaşık bir parçasıdır, ama ben örneği anlamak için daha kolay bir sağlamak için çalışıyorum.

Ben istiyorum kod gerçek bloğu

<script language="javascript">document.write(rot_decode('<u7>Pbagnpg Qrgnvyf</u7><qy vq="pbagnpgQrgnvyf"><qg>Cu:</qg><qq>(58) 0078 8455</qq></qy>'));</script>

Bu tüm kapatma etiketleri atlar ama açılış etiketlerini tutar sorunu var. Ben XPATH yerine sadece bir dize olarak tedavi daha iç unsurları ayrıştırmak çalışıyor çünkü tahmin ediyorum.

Ben deneyin ve komut dosyası öğesini seçerseniz

$testDom = $this->xpath->evaluate("//div[@id='businessDetails']/script");
$test = $testDom->item(0)->nodeValue;
echo htmlentities($test);

benim çıktı tüm kapatma etiketleri eksik görebilirsiniz, hangi olacak.

document.write(rot_decode('<u7>Pbagnpg Qrgnvyf<qy vq="pbagnpgQrgnvyf"><qg>Cu:<qq>(58) 0078 8455'));

3 Cevap

Ben XPATH ben istediğim için uygun değildi karar verdi ve şimdi çok daha uygun görev için PHP Simple HTML DOM Parser hangi kullanıyorum.

Sadece iyi iç html biçimlendirme korur.

foreach($this->simpleDom->find('script[language=javascript]') as $script) {
		echo htmlentities($script->innertext());
}

Yes you are right, DOM parses the child elements (because they are elements and not strings), and the correct way to get data from child elements is to iterate through all of them. Implementing that would not be complicated, though.
You may want to denemek a different XPath expression as well, instead of

//ul[@id='adPoint1']

denemek

//ul[@id='adPoint1']/li

which would select elements with actual string values.
If give the expected result as well (for both the ul and the script) maybe you will get more answers.

saveHTML() sahibinin belge nesnesi çağırıyoruz yılında isteğe bağlı argüman olarak düğüm geçmek.

string DOMDocument::saveHTML ([ DOMNode $node = NULL ] )

Bak ...

http://php.net/manual/en/domdocument.savehtml.php