လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP XPRATH လုပ်ဆောင်မှုသည်အမှားအယွင်းများကိုအမြဲအစီရင်ခံပါသလော။ ဤဘုံ syntax အမှားအယွင်းများနှင့်ဖြေရှင်းချက်များကိုစစ်ဆေးပါ

PHP XPRATH လုပ်ဆောင်မှုသည်အမှားအယွင်းများကိုအမြဲအစီရင်ခံပါသလော။ ဤဘုံ syntax အမှားအယွင်းများနှင့်ဖြေရှင်းချက်များကိုစစ်ဆေးပါ

gitbox 2025-09-09

PHP XPRATH လုပ်ဆောင်မှုသည်အမှားအယွင်းများကိုအမြဲအစီရင်ခံပါသလော။ ဤဘုံ syntax အမှားအယွင်းများနှင့်ဖြေရှင်းချက်များကိုစစ်ဆေးပါ

PHP ၏ XPATH လုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ developer များစွာသည်အထူးသဖြင့် XPath Syntax နှင့်သက်ဆိုင်သောပြ problems နာများကိုများစွာကြုံတွေ့ရလိမ့်မည်။ XPath ဆိုသည်မှာ XML စာရွက်စာတမ်းများတွင်ဒေတာများကိုရှာဖွေရန်အသုံးပြုသောဘာသာစကားဖြစ်သည်။ PHP နှင့် တွဲဖက်. အသုံးပြုသောအခါ, သို့သော်၎င်း၏ syntax နှင့်အသုံးပြုမှုအသေးစိတ်အချက်အလက်များကြောင့်၎င်းသည်အမှားအယွင်းများနှင့်ပြ troubl နာအချို့ကိုမကြာခဏဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည် PHP ၏ XPATH လုပ်ဆောင်မှုကိုပိုမိုကောင်းမွန်စွာအသုံးပြုရန်ကူညီရန်မျှော်လင့်သော XPATH အမှားများနှင့်သူတို့၏ဖြေရှင်းနည်းများကိုဝေမျှလိမ့်မည်။

1 ။ XML document ကိုတရားဝင်ရှိမရှိအတည်ပြုပါ

အသုံးအများဆုံးအမှားတစ်ခုမှာ XML ဖိုင်ကို XML ကိုပြုပြင်သည့်အခါ XML ဖိုင်ကိုမှန်ကန်စွာဖွင့်ထားခြင်းမဟုတ်ပါ။ ဤပြ problem နာသည် XPATH function ကို XML စာရွက်စာတမ်းအားမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာရန်ပျက်ကွက်စေနိုင်သည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">load</span></span><span>(</span><span><span class="hljs-string">'invalid.xml'</span></span><span>);  </span><span><span class="hljs-comment">// ဖတ်ရန်မအောင်မြင်ပါXMLစာချုပ်စာတမ်း</span></span><span>
</span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span></span>

ဖြေရှင်းချက် -

ပထမ ဦး စွာ XML ဖိုင်ကိုလမ်းကြောင်းမှန်ပေါ်မှန်ကန်ကြောင်းနှင့် XML ဖိုင်ကိုယ်တိုင်ကမှန်ကန်ကြောင်းသေချာအောင်လုပ်ပါ။ XML ဖိုင်ကိုမှန်ကန်စွာတင်ထားသလားဆိုတာစစ်ဆေးနိုင်သည်။

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">load</span></span><span>(</span><span><span class="hljs-string">'valid.xml'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'XMLစာချုပ်စာတမ်း加载失败'</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span></span>

2 ။ XPATH Expression အမှား

XPath Syntax ကိုယ်တိုင်လည်းအတော်အတန်တင်းကြပ်သည်, ဂရုမစိုက်မှုအနည်းငယ်သည်အမှားအယွင်းများဖြစ်ပေါ်စေလိမ့်မည်။ အကယ်. XPhath Expression တွင် syntax အမှားတစ်ခုရှိပါက query () နည်းလမ်းသည် မှားယွင်းသော နောက်သို့ပြန်ပို့ပေးပြီးမျှော်လင့်ထားသည့်ရလဒ်ကိုထုတ်ပေးလိမ့်မည်မဟုတ်ပါ။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'book[@category="PHP"'</span></span><span>);  </span><span><span class="hljs-comment">// ကွင်းခတ်ပိတ်ထားကြသည်မဟုတ်</span></span><span>
</span></span>

ဖြေရှင်းချက် -

ကွင်းခတ်များ, ကိုးကားချက်များနှင့်အခြားသင်္ကေတများကဲ့သို့သောသင်္ကေတများမှန်ကန်စွာတွဲဖက်ထားကြောင်းသေချာစေရန် XPhath Expression ကိုစစ်ဆေးပါ။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book[@category="PHP"]'</span></span><span>);
</span></span>

3 ။ namespaces သုံးပြီးတဲ့အခါမှာအပြောင်းအလဲနဲ့

XML နှင့်အလုပ်လုပ်သောအခါ xml စာရွက်စာတမ်းတွင် NamPl မှတ်တမ်းတွင်အသုံးပြုပါက XPath Query သည်ပုံမှန်အားဖြင့် XML စာရွက်စာတမ်းတွင်အသုံးပြုသည်ဆိုပါစို့

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-string">'&lt;root xmlns:ns="http://example.com"&gt;&lt;ns:book&gt;Title&lt;/ns:book&gt;&lt;/root&gt;'</span></span><span>);
</span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//ns:book'</span></span><span>);
</span></span>

ဖြေရှင်းချက် -

Domxpath ကို installate လုပ်တဲ့အခါ namespace ပြ problem နာကိုဖြေရှင်းဖို့ namespace ကိုမှတ်ပုံတင်ဖို့ register ည့်သည် နည်းနည်းလမ်းကိုသုံးနိုင်တယ်။

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-string">'&lt;root xmlns:ns="http://example.com"&gt;&lt;ns:book&gt;Title&lt;/ns:book&gt;&lt;/root&gt;'</span></span><span>);
</span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">registerNamespace</span></span><span>(</span><span><span class="hljs-string">'ns'</span></span><span>, </span><span><span class="hljs-string">'http://example.com'</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//ns:book'</span></span><span>);
</span></span>

4 ။ () query ကို () နည်းလမ်း၏ပြန်လာတန်ဖိုးကို၏အပြောင်းအလဲနဲ့

အဆိုပါ XPath-> query () နည်းလမ်း () နည်းလမ်းသည် domnodelist အရာဝတ်ထုကိုပြန်ပို့သည်။ စုံစမ်းမှုသည်အောင်မြင်သော်လည်းရလဒ်သည်အချည်းနှီးဖြစ်နိုင်ပြီးရလဒ်ဆုံးဖြတ်ချက်ချရမည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)-&gt;nodeValue;  </span><span><span class="hljs-comment">// အဘယ်သူမျှမ node ကိုရှာမတွေ့သောကြောင့်အမှားတစ်ခုသတင်းပို့နိုင်ပါသည်</span></span><span>
</span></span>

ဖြေရှင်းချက် -

စုံစမ်းမှုရလဒ်များကိုရယူခြင်းမပြုမီ, သူတို့တည်ရှိကြောင်းသေချာပါစေ:

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>-&gt;length &gt; </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)-&gt;nodeValue;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'အဘယ်သူမျှမကိုက်ညီ node ကိုရှာတွေ့ခဲ့သည်'</span></span><span>;
}
</span></span>

5 ။ ရလဒ်များကိုပြန်ပို့ရန် query () ကို အသုံးပြုသောအခါ indexing ပြ problem နာ

DomNodelist Object သည်အရာဝတ်ထုတစ်ခု၏ခင်းကျင်းမှုတစ်ခုဖြစ်သည်။ ဘုံအမှားတစ်ခုသည်အကန့်အသတ်မဲ့သို့မဟုတ်ရလဒ်ကိုမစစ်ဆေးနိုင်ပါ။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>)-&gt;nodeValue;  </span><span><span class="hljs-comment">// အဆိုပါ query ကိုရလဒ်များထက်လျော့နည်းဖြစ်ကြသည်ဆိုပါက10node တစ်ခု,ကုဒ်ကအမှားတစ်ခုသတင်းပို့ပါလိမ့်မယ်</span></span><span>
</span></span>

ဖြေရှင်းချက် -

Domnodelist Object ၏အရှည်ကိုသေချာစေရန်အညွှန်းကိန်းသည်ခိုင်လုံသောအကွာအဝေးအတွင်းရှိသေချာစေရန်သေချာစေရန်

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>-&gt;length &gt; </span><span><span class="hljs-number">10</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>)-&gt;nodeValue;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'node များအလုံအလောက်မရှိပါ'</span></span><span>;
}
</span></span>

6 ။ စုံစမ်းမှုအခြေအနေများသည်အလွန်ရှုပ်ထွေးသည်

အကယ်. XPhath Expression သည်အလွန်ရှုပ်ထွေးလွန်းပါကအခြေအနေများစွာသို့မဟုတ်ရှုပ်ထွေးသောယုတ္တိဗေဒများပါ 0 ်ပါက, ဤကိစ္စအတွက်, သင်သည်ရှာဖွေခြင်းသို့မဟုတ်ခြေလှမ်းလှမ်း step-by-step-by-by-by-by-sep-by-hearting ကိုကြိုးစားကြည့်ရှုနိုင်သည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book[@category="PHP" and @author="John"]'</span></span><span>);
</span></span>

ဖြေရှင်းချက် -

XPAPH အသုံးအနှုန်းများကိုရိုးရှင်းအောင်ပြုလုပ်ခြင်း, တဖြည်းဖြည်းချင်းအခြေအနေများထပ်တိုးပြီးအခြေအနေတစ်ခုစီမှန်ကန်ကြောင်းသေချာစေရန်သူတို့ကို debugug လုပ်ပါ။

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book[@category="PHP"]'</span></span><span>);  </span><span><span class="hljs-comment">// ပထမ ဦး ဆုံးတစ်ခုတည်းအခြေအနေအတည်ပြုပါ</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book[@category="PHP" and @author="John"]'</span></span><span>);  </span><span><span class="hljs-comment">// ဒုတိယအခွအေန add</span></span><span>
</span></span>

7 ။ query () နည်းလမ်းအားဖြင့်ပြန်လာ Non-Array အရာဝတ်ထု

Domnodelist သည် array အရာဝတ်ထုတစ်ခုဖြစ်သော်လည်း၎င်းသည်ခင်းကျင်းမှုနှင့်အတိအကျမတူပါ။ အချို့ဖြစ်ရပ်များတွင်၎င်းကို array ကဲ့သို့တိုက်ရိုက်ဝင်ရောက်ကြည့်ရှုရန်သို့မဟုတ်လုပ်ဆောင်ရန်မဖြစ်နိုင်ပါ။ ဤပြ problem နာကိုဖြေရှင်းရန်မှာ domnodelist ကို အရင်ခင်းကျင်းရန်ပထမ ဦး ဆုံးအနေဖြင့်အစားထိုးနိုင်သည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$node</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$node</span></span><span>-&gt;nodeValue;  </span><span><span class="hljs-comment">// ဒါကအမှားတစ်ခုဖြစ်ပေါ်စေလိမ့်မယ်</span></span><span>
}
</span></span>

ဖြေရှင်းချက် -

Domnodelist ကို Array နှင့် loop သို့ပြောင်းပါ။

 <span><span><span class="hljs-variable">$xpath</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMXPath</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xpath</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span><span><span class="hljs-variable">$nodes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iterator_to_array</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);  </span><span><span class="hljs-comment">// တစ်ခုခင်းကျင်းဖို့ပြောင်းပါ</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$nodes</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$node</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$node</span></span><span>-&gt;nodeValue;
}
</span></span>