अद्यतन: *[@class~='my-class']
सीएसएस चयनकर्ता का Xpath संस्करण
तो हैकर की टिप्पणी के जवाब में नीचे मेरी टिप्पणी के बाद, मैं उत्सुक हो गया और पीछे के कोड में देखा Zend_Dom_Query
। ऐसा लगता है कि उपरोक्त चयनकर्ता को निम्नलिखित xpath (अप्रयुक्त) में संकलित किया गया है:
[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]
तो php होगा:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
मूल रूप से, हम सभी यहां class
विशेषता को सामान्य करते हैं ताकि एक भी वर्ग रिक्त स्थान से घिरा हो, और पूर्ण वर्ग सूची रिक्त स्थान में बंधी हो। फिर उस कक्षा को जोड़ दें जिसे हम एक स्थान के साथ खोज रहे हैं। इस तरह हम प्रभावी रूप से देख रहे हैं और केवल उदाहरणों को ढूंढते हैं my-class
।
एक xpath चयनकर्ता का उपयोग करें?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
यदि यह केवल एक प्रकार का तत्व है तो आप इसे *
विशेष टैग्नैम से बदल सकते हैं ।
अगर आपको बहुत जटिल चयनकर्ता के साथ यह करने की आवश्यकता है, तो मैं सुझाऊंगा कि Zend_Dom_Query
कौन सीएसएस चयनकर्ता सिंटैक्स (एक ला jQuery) का समर्थन करता है:
$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");