2012-09-05 10 views
6

मैं एक दूरस्थ XML आधारित API से कनेक्ट PHP और XPath के साथ काम कर रहा हूं। सर्वर से नमूना प्रतिक्रिया नीचे दी गई है।<Success /> नोड मौजूद है, यह जांचने के लिए XPath का उपयोग कैसे करें

<OTA_PingRS> 
     <Success /> 
     <EchoData>This is some test data</EchoData> 
    </OTA_PingRS> 

आप देख सकते हैं कोई मूल्य उस टैग <Success> मैं XPath का उपयोग कर <Success /> के अस्तित्व के लिए खोज कैसे होती है तो?

धन्यवाद साइमन

+1

सामान्य तरीका, आपने क्या प्रयास किया? – Musa

उत्तर

7

<Success /> तत्व जिसका अर्थ यह कोई मूल्य नहीं है एक empty element है। यह दोनों, प्रारंभ और अंत टैग है।

आप कर सकते हैं test for existence of nodes with the XPath function boolean()

इस प्रकार बूलियन समारोह एक बूलियन करने के लिए अपने तर्क धर्मान्तरित:

  • एक नंबर से सच है अगर और सिर्फ़ अगर यह न तो सकारात्मक या नकारात्मक है शून्य है और न ही NaN
  • एक नोड-सेट सत्य है यदि केवल और यदि यह खाली नहीं है
  • एक स्ट्रिंग सत्य है और केवल तभी इसकी लंबाई गैर-शून्य
  • है
  • एक प्रकार चार बुनियादी प्रकार के अलावा अन्य की एक वस्तु एक तरीका है कि उस प्रकार पर निर्भर करता है में एक बूलियन में बदल जाती है

कि DOMXPath साथ आप DOMXPath::evaluate() विधि क्योंकि उपयोग करने की आवश्यकता करने के लिए यह एक टाइप किया परिणाम वापस आ जाएगी इस मामले में, एक boolean:

$xml = <<< XML 
<OTA_PingRS> 
    <Success /> 
    <EchoData>This is some test data</EchoData> 
</OTA_PingRS> 
XML; 

$dom = new DOMDocument; 
$dom->loadXml($xml); 

$xpath = new DOMXPath($dom); 
$successNodeExists = $xpath->evaluate('boolean(/OTA_PingRS/Success)'); 

var_dump($successNodeExists); // true 

demo


बेशक

, आप भी सिर्फ /OTA_PingRS/Success के लिए क्वेरी और वहाँ वापस आ DOMNodeList में परिणाम हैं कि क्या देख सकते हैं:

$xml = <<< XML 
<OTA_PingRS> 
    <Success /> 
    <EchoData>This is some test data</EchoData> 
</OTA_PingRS> 
XML; 

$dom = new DOMDocument; 
$dom->loadXml($xml); 

$xpath = new DOMXPath($dom); 
$successNodeList = $xpath->evaluate('/OTA_PingRS/Success'); 

var_dump($successNodeList->length); 

demo


तुम भी SimpleXML उपयोग कर सकते हैं:

$xml = <<< XML 
<OTA_PingRS> 
    <Success /> 
    <EchoData>This is some test data</EchoData> 
</OTA_PingRS> 
XML; 

$nodeCount = count(simplexml_load_string($xml)->xpath('/OTA_PingRS/Success')); 

var_dump($nodeCount); // 1 
+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद। बहुत सराहना की। – PrestonDocks

2

वाक्यविन्यास:

<Success /> 

है exactly equivalent

को
<Success></Success> 

आदेश <Success /> के अस्तित्व का परीक्षण करने के लिए, आप बस इस तरह एक पथ का उपयोग करें:

//OTA_PingRS/Success[1] 

अब आप परीक्षण UF कर सकते हैं परिणाम रिक्त है । यदि हां, <Success /> तत्व मौजूद नहीं है।

+0

प्रतिक्रिया के लिए धन्यवाद, इससे मुझे बेहतर समझने में मदद मिली कि xpath और simplexml XML डेटा को कैसे संभालता है। – PrestonDocks

0

एक्सपैथ के बूलियन मान को जांचने के लिए फ़ंक्शन का उपयोग करें, जिसे आप अस्तित्व की जांच करना चाहते हैं।

संबंधित मुद्दे