လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Simplexml_load_string သည် XML namespace ကိုမခွဲနိုင်ပါ။ ဆောင်းပါးတစ်ပုဒ်တွင်ဖြေရှင်းနည်းကိုနားလည်ပါ

Simplexml_load_string သည် XML namespace ကိုမခွဲနိုင်ပါ။ ဆောင်းပါးတစ်ပုဒ်တွင်ဖြေရှင်းနည်းကိုနားလည်ပါ

gitbox 2025-08-10

PHP ကို XML အချက်အလက်များကိုအသုံးပြုသောအခါ SimplexMl_load_string သည် XML ကြိုးများကိုလွယ်ကူစွာဝင်ရောက်ခြင်းနှင့်ခြယ်လှယ်ရန်အတွက် XML ကြိုးများကိုအရာဝတ်ထုအဆောက်အအုံများအဖြစ်ပြောင်းလဲခြင်းဖြစ်သည်။ သို့သော် developer များစွာသည် XML နှင့်အတူ XML ကိုကိုင်တွယ်ဖြေရှင်းသည့်အခါဘုံပြ problem နာတစ်ခုနှင့်ကြုံတွေ့ရသည်

ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများကိုအသေးစိတ်လေ့လာပြီးသင့်အားဆောင်းပါးတစ်ပုဒ်တွင်သူတို့ကိုနားလည်ရန်နှင့်ဖြေရှင်းရန်ရှင်းလင်းသောဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။

အဆိုပါပြ problem နာကိုပြန်ပေါ်လာ

နမူနာတစ်ခုပါ 0 င်သည့် XML string တစ်ခုဖြစ်သည့်ဥပမာတစ်ခုကိုပထမအကြိမ်ကြည့်ကြစို့။

 <span><span><span class="hljs-meta">&lt;?xml version=<span class="hljs-string">"1.0"</span></span></span><span>?&gt;
</span><span><span class="hljs-tag">&lt;<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>&gt;
  </span><span><span class="hljs-tag">&lt;<span class="hljs-name">h:table</span></span></span><span>&gt;
    </span><span><span class="hljs-tag">&lt;<span class="hljs-name">h:tr</span></span></span><span>&gt;
      </span><span><span class="hljs-tag">&lt;<span class="hljs-name">h:td</span></span></span><span>&gt;Apples</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">h:td</span></span></span><span>&gt;
      </span><span><span class="hljs-tag">&lt;<span class="hljs-name">h:td</span></span></span><span>&gt;Bananas</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">h:td</span></span></span><span>&gt;
    </span><span><span class="hljs-tag">&lt;/<span class="hljs-name">h:tr</span></span></span><span>&gt;
  </span><span><span class="hljs-tag">&lt;/<span class="hljs-name">h:table</span></span></span><span>&gt;
</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">root</span></span></span><span>&gt;
</span></span>

ကျွန်ုပ်တို့သည်အောက်ပါကုဒ်ကို သုံး. ခွဲခြမ်းစိတ်ဖြာရန်ကြိုးစားပါက -

 <span><span><span class="hljs-variable">$xmlString</span></span><span> = <span class="hljs-string">&lt;&lt;&lt;XML
&lt;?xml version="1.0"?&gt;
&lt;root xmlns:h="http://www.w3.org/TR/html4/"&gt;
  &lt;h:table&gt;
    &lt;h:tr&gt;
      &lt;h:td&gt;Apples&lt;/h:td&gt;
      &lt;h:td&gt;Bananas&lt;/h:td&gt;
    &lt;/h:tr&gt;
  &lt;/h:table&gt;
&lt;/root&gt;
XML</span>;

</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;table);
</span></span>

$ XML-> TABLE သည် ရလဒ်များကိုမပြန်မလာဟုသင်တွေ့လိမ့်မည်။ ဘာကြောင့်လဲဆိုတော့ SmanyxMl_load_string က ရှေ့တန်း က prefixed namespace tags တွေကိုမကိုင်တွယ်နိုင်လို့ပဲ။

တစ် ဦး namespace ၏သဘောသဘာဝ

XML တွင် element name ပ conflicts ိပက်ခများကိုရှောင်ရှားရန်အမည်စာရင်းများကိုအသုံးပြုသည်။ ဥပမာအားဖြင့် င - ဇယား သည် XMLNS ကိုညွှန်ပြသောရည်ညွှန်းရှေ့ဆက်တစ်ခုဖြစ်ပြီး H = "http://www.w3.org/ttml4/" ၎င်းသည် XML ကိုပိုမိုကျယ်ပြန့်စွာကျယ်ကျယ်ပြန့်ပြန့်ဖွဲ့စည်းထားသော်လည်းထပ်ဆင့်ခွဲခြမ်းစိတ်ဖြာရန်အခက်အခဲများကြုံတွေ့စေသည်။

unamespace ကိုမှန်ကန်စွာကိုင်တွယ်ဖြေရှင်းနည်း

ကျွန်ုပ်တို့သည် Simplexmleleme Class မှပေးထားသော ကလေးများ () နှင့် GetNamesptiones () ကိုသုံးနိုင်သည်။

အဆင့် 1 - NAMSPARE ကိုရယူပါ

 <span><span><span class="hljs-variable">$namespaces</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getNamespaces</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// ရလဒ်ရလဒ်:['h' =&gt; 'http://www.w3.org/TR/html4/']</span></span><span>
</span></span>

အဆင့် 2 - ကလေးသူငယ်များကို namespace ထဲမှရယူပါ

 <span><span><span class="hljs-variable">$h</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">children</span></span><span>(</span><span><span class="hljs-variable">$namespaces</span></span><span>[</span><span><span class="hljs-string">'h'</span></span><span>]);
</span><span><span class="hljs-variable">$tr</span></span><span> = </span><span><span class="hljs-variable">$h</span></span><span>-&gt;table-&gt;tr;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$tr</span></span><span>-&gt;td </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$td</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$td</span></span><span> . PHP_EOL;
}
</span></span>

ရလဒ်ရလဒ် -

 <span><span><span class="hljs-attribute">Apples</span></span><span>
Bananas
</span></span>

နောက်ထပ်သွား

ဒေတာကိုရယူရန် XPathery Method ကိုသုံးလိုပါက namespace ကို revegistpathernesterpace method မှတဆင့်မှတ်ပုံတင်နိုင်သည်။

 <span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-variable">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">registerXPathNamespace</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">$xml</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">'//h:td'</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$tds</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$td</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$td</span></span><span> . PHP_EOL;
}
</span></span>

ဤချဉ်းကပ်မှုသည် semantically ရှင်းလင်းရုံသာမကရှုပ်ထွေးသော XML အဆောက်အအုံများနှင့်ဆက်ဆံရာတွင်ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိပါသည်။

အကျဉ်းချုပ်

SimplexML_load_string ကို xml ကို namespace နဲ့ parse နဲ့ parse လုပ်ဖို့သုံးတဲ့အခါကလေးတွေကိုလက်လှမ်းမမီနိုင်ကြောင်းသင်တွေ့ရှိပါက XML သည်မမှန်ကန်ကြောင်းသံသယမထားပါနှင့်။ BeatureSte () , GetNamesptions () နှင့် recordnappitogeshace () နည်းလမ်းများကိုကောင်းစွာအသုံးပြုခြင်းနှင့်ကောင်းမွန်စွာအသုံးပြုပါ။

ကိုင်တွယ်ပုံသည်တစ်ချိန်ကကျွမ်းကျင်ပြီးသည်နှင့်တစ်ချိန်ကကျွမ်းကျင်သော XML ဒေတာရင်းမြစ်အမျိုးမျိုးကိုချောမွေ့စွာဆက်သွယ်နိုင်ပြီး PHP application များ၏ပေါင်းစည်းမှုစွမ်းရည်များကိုပိုမိုချောမွေ့စွာဆက်သွယ်နိုင်သည်။ ဒီဆောင်းပါးကဒီစာစောင်ကိုနှိုက်နှိုက်ချွတ်ချွတ်နားလည်ဖို့ဒီဆောင်းပါးကကူညီပေးနိုင်တယ်လို့မျှော်လင့်ပါတယ်။