query
आपकी वास्तविक XPath अभिव्यक्ति के बावजूद DOMNodeList
वापस करेगा। इससे पता चलता है कि आप नहीं जानते कि परिणाम क्या हो सकता है। तो आप सूची में पुन: प्रयास कर सकते हैं और नोड्स के node type जांच सकते हैं और प्रकार के आधार पर कुछ कर सकते हैं।
लेकिन query
इस उपयोग के मामले तक सीमित नहीं है। जब भी आप जानते हैं कि आपको किस प्रकार का पता चल जाएगा तब भी आप इसका उपयोग कर सकते हैं। भविष्य में यह और अधिक पठनीय हो सकता है जिसे आप हासिल करना चाहते थे और इसलिए बनाए रखना आसान था।
evaluate
दूसरी तरफ आपको वही प्रकार देता है जो आप चुनते हैं। के रूप में उदाहरण का कहना है:
$xpath->evaluate("1 = 0"); // FALSE
$xpath->evaluate("string(1 = 0)"); // "false"
यह पता चला है के रूप में चयन //div/@id
या पाठ नोड्स //div/text()
अभी भी पैदावार तार के बजाय DOMNodeList
जिम्मेदार बताते हैं। तो संभावित उपयोग के मामले सीमित हैं। आपको उन्हें string
: string(//div/@id)
या टेक्स्ट नोड्स string(//div/text())
में संलग्न करना होगा।
evaluate
का मुख्य लाभ यह है कि आप कोड की कम लाइनों के साथ अपने DOMDocument
से स्ट्रिंग प्राप्त कर सकते हैं। अन्यथा यह query
के समान उत्पादन का उत्पादन करेगा।
ThW's answer सही है कि कुछ भाव query
साथ काम नहीं करेंगे है:
$xpath->query("string(//div/@id)") // DOMNodeList of length 0
$xpath->evaluate("string(//div/@id)") // string with the found id
स्रोत
2014-05-21 23:35:09