DomDocument နှင့် Domxpath တို့သည် PHP ကို XML အချက်အလက်များကို အသုံးပြု. PHP ကိုအသုံးပြုသောအခါအလွန်အစွမ်းထက်သောကိရိယာနှစ်ခုဖြစ်သည်။ အထူးသဖြင့်ရှုပ်ထွေးသော XML Queries များလိုအပ်ပါက Namespace နှင့် XPath Expressions များကိုအသုံးပြုခြင်းသည်ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်တိကျမှန်ကန်မှုကိုများစွာတိုးတက်စေနိုင်သည်။ သင်၏ XML စုံစမ်းမှုစွမ်းရည်ကိုတိုးချဲ့ရန်နှင့်မြှင့်တင်ရန် Regisnegathneshace Method နှင့် CustomPhathing function ကိုမည်သို့ပေါင်းစပ်ရမည်ကိုဤဆောင်းပါးကမိတ်ဆက်ပေးလိမ့်မည်။
များစွာသော XML စာရွက်စာတမ်းများတွင်ဒြပ်စင်နှင့် attribute များသည်များသောအားဖြင့် namespace ရှေ့ဆက်များရှိသည်။ ဥပမာအားဖြင့်:
<span><span><span class="hljs-tag"><<span class="hljs-name">root</span></span></span><span> </span><span><span class="hljs-attr">xmlns:h</span></span><span>=</span><span><span class="hljs-string">"http://www.w3.org/TR/html4/"</span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">h:table</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">h:tr</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">h:td</span></span></span><span>>Apples</span><span><span class="hljs-tag"></<span class="hljs-name">h:td</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">h:td</span></span></span><span>>Bananas</span><span><span class="hljs-tag"></<span class="hljs-name">h:td</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">h:tr</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">h:table</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">root</span></span></span><span>>
</span></span>
<h: td> ကဲ့သို့သော node များကိုမှန်ကန်စွာမေးမြန်းရန် XPath Expression သည် prefix hate နှင့်သက်ဆိုင်သော nampate uri ကိုသိရန်လိုအပ်သည်။ ဒီဟာက registerxpathernesnespace ဟာအသုံးဝင်မှာပါ။
<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-variable">$yourXmlString</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">"h"</span></span><span>, </span><span><span class="hljs-string">"http://www.w3.org/TR/html4/"</span></span><span>);
</span><span><span class="hljs-variable">$tds</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">"//h:td"</span></span><span>);
</span></span>
အကယ်. XPath Teaust သည်အစွမ်းထက်သော်လည်းအချို့သောစီးပွားရေးယုတ္တိဗေဒဆိုင်ရာအခြေအနေများတွင် built-in XPATH လုပ်ဆောင်ချက်များတွင်လိုအပ်ချက်များကိုဖြည့်ဆည်းပေးနိုင်မည်မဟုတ်ပါ။ ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည် Element တစ်ခု၏တန်ဖိုးသည်ဒေတာဘေ့စ်သို့မဟုတ်ခင်းကျင်းမှုတွင်ပုံရိပ်တစ်ခု၏တန်ဖိုးကိုဆုံးဖြတ်ရန်သို့မဟုတ်ပိုမိုရှုပ်ထွေးသော string processing လုပ်ဆောင်ခြင်းရှိမရှိဆုံးဖြတ်ရန်လုပ်ဆောင်လိုသည်။
PHP သည်ဓလေ့ထုံးစံများကို XPher သို့ထိုးသွင်းခြင်းမပံ့ပိုးနိုင်ပါ ။
သို့သော် namespace ကိုမှတ်ပုံတင်ရန်နှင့် XPLE Query ကိုမသုံးမီ XPath မေးမြန်းမှုကိုမသုံးမီ XML ကိုကြိုတင်မသုံးလေ့ရှိသည်။
သင့်တွင် <item> node များနှင့်အတူ namespaces နှင့်အတူ node များပါဝင်သောအောက်ပါ XML စာရွက်စာတမ်းရှိသည်ဆိုပါစို့:
<span><span><span class="hljs-tag"><<span class="hljs-name">catalog</span></span></span><span> </span><span><span class="hljs-attr">xmlns:bk</span></span><span>=</span><span><span class="hljs-string">"http://example.com/book"</span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:item</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:title</span></span></span><span>>PHP အစီအစဉ်</span><span><span class="hljs-tag"></<span class="hljs-name">bk:title</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:price</span></span></span><span>>45</span><span><span class="hljs-tag"></<span class="hljs-name">bk:price</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">bk:item</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:item</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:title</span></span></span><span>>Java အစီအစဉ်</span><span><span class="hljs-tag"></<span class="hljs-name">bk:title</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">bk:price</span></span></span><span>>55</span><span><span class="hljs-tag"></<span class="hljs-name">bk:price</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">bk:item</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">catalog</span></span></span><span>>
</span></span>
သင် 50 ယွမ် 50 အောက်စျေးအတွက်စာအုပ်ခေါင်းစဉ်များအားလုံးကိုသင်မေးမြန်းလိုပါသည်။ XPATH ကိုယ်တိုင်ကကိန်းဂဏန်းနှိုင်းယှဉ်မှုကိုထောက်ခံသည်။
<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">"bk"</span></span><span>, </span><span><span class="hljs-string">"http://example.com/book"</span></span><span>);
</span><span><span class="hljs-variable">$nodes</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">"//bk:item[bk:price < 50]/bk:title"</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><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
အကယ်. ရှုပ်ထွေးသောယုတ္တိဗေဒကိုသင်အကောင်အထည်ဖော်လိုပါက (ဥပမာ - 50 အောက်ရှိစျေးနှုန်းနှင့်ခေါင်းစဉ်တွင် PHP ") တွင်ပါ 0 င်သည်။
<span><span><span class="hljs-variable">$nodes</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">"//bk:item[bk:price < 50 and contains(bk:title, 'PHP')]/bk:title"</span></span><span>);
</span></span>
သို့သော်ယုတ္တိဗေဒသည်ပိုမိုရှုပ်ထွေးပါက "Keyword table တွင်စကားလုံးများပါ 0 င်သည့်ခေါင်းစဉ်များပါ 0 င်သည့်ခေါင်းစဉ်များပါ 0 င်သော node များဖြင့်ထားခြင်း" ကဲ့သို့သောရလဒ်များကို Query ပြီးနောက်စိတ်ကြိုက် function ကို filter လုပ်ရန်လိုအပ်သည်။
<span><span><span class="hljs-variable">$keywords</span></span><span> = [</span><span><span class="hljs-string">'PHP'</span></span><span>, </span><span><span class="hljs-string">'MySQL'</span></span><span>, </span><span><span class="hljs-string">'Laravel'</span></span><span>];
</span><span><span class="hljs-variable">$nodes</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">"//bk:item/bk:title"</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">foreach</span></span><span> (</span><span><span class="hljs-variable">$keywords</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$word</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stripos</span></span><span>(</span><span><span class="hljs-variable">$node</span></span><span>->nodeValue, </span><span><span class="hljs-variable">$word</span></span><span>) !== </span><span><span class="hljs-literal">false</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-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">break</span></span><span>;
}
}
}
</span></span>
၎င်းသည် XPathery ရလဒ်ပြင်ပရှိယုတ္တိရှိသောအပြောင်းအလဲတစ်ခုဖြစ်သော်လည်း၎င်းသည် XPath Query စွမ်းရည်နှင့် PHP စိတ်ကြိုက်ဟန်ချက်ညီမှုများကိုပေါင်းစပ်ထားသည်။
အကယ်. သင်သည် PHP လုပ်ဆောင်ချက်များကို XPath Legic ထဲသို့ထည့်သွင်းရန်လိုအပ်ပါက XPath Legic ထဲသို့ XPATHCONENSE နှင့် PHP Extension လုပ်ဆောင်ချက်များကိုပေါင်းစပ်စဉ်းစားပါ။ ဥပမာအားဖြင့်, PHP: functionstring ') ကိုမှတ်ပုံတင်ခြင်းဖြင့် (ဥပမာ - PHP: Forctionstring) ) မှတ်ပုံတင်ခြင်းဖြင့်တရားစီရင်ခြင်းဆိုင်ရာဆုံးဖြတ်ချက်များကိုအကောင်အထည်ဖော်ရန်ဖြစ်သည် ။