PHP ၏ XPATH လုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ developer များစွာသည်အထူးသဖြင့် XPath Syntax နှင့်သက်ဆိုင်သောပြ problems နာများကိုများစွာကြုံတွေ့ရလိမ့်မည်။ XPath ဆိုသည်မှာ XML စာရွက်စာတမ်းများတွင်ဒေတာများကိုရှာဖွေရန်အသုံးပြုသောဘာသာစကားဖြစ်သည်။ PHP နှင့် တွဲဖက်. အသုံးပြုသောအခါ, သို့သော်၎င်း၏ syntax နှင့်အသုံးပြုမှုအသေးစိတ်အချက်အလက်များကြောင့်၎င်းသည်အမှားအယွင်းများနှင့်ပြ troubl နာအချို့ကိုမကြာခဏဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည် PHP ၏ XPATH လုပ်ဆောင်မှုကိုပိုမိုကောင်းမွန်စွာအသုံးပြုရန်ကူညီရန်မျှော်လင့်သော XPATH အမှားများနှင့်သူတို့၏ဖြေရှင်းနည်းများကိုဝေမျှလိမ့်မည်။
အသုံးအများဆုံးအမှားတစ်ခုမှာ 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>-></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>-></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>-></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>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'//book'</span></span><span>);
</span></span>
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>-></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>-></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>
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>-></span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-string">'<root xmlns:ns="http://example.com"><ns:book>Title</ns:book></root>'</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>-></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>-></span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-string">'<root xmlns:ns="http://example.com"><ns:book>Title</ns:book></root>'</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>-></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>-></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>
အဆိုပါ 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>-></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>-></span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)->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>-></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>->length > </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>-></span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)->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>
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>-></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>-></span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>)->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>-></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>->length > </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>-></span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>)->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>
အကယ်. 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>-></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>-></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>-></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>
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>-></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>->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>-></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>->nodeValue;
}
</span></span>