<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQueryTips by Tee++; &#187; XML</title>
	<atom:link href="http://www.jquerytips.com/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jquerytips.com</link>
	<description>Coding is fun.</description>
	<lastBuildDate>Sun, 25 Apr 2010 11:30:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>อ่าน xml ทั้งที ไม่มี xPath ได้ไง</title>
		<link>http://www.jquerytips.com/2008/07/20/how-to-use-xpath/</link>
		<comments>http://www.jquerytips.com/2008/07/20/how-to-use-xpath/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 18:14:06 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/07/20/how-to-use-xpath/</guid>
		<description><![CDATA[เกริ่นกันก่อน หลายๆคนอาจจะเริ่ม ตะหงิดๆ ทำไมพักนี้ผม อัพเดทอะไร หลายๆอย่างไม่ได้ เกี่ยวกับ jQuery เลย นั่นก็เพราะว่า &#8220;นึกไม่ออก&#8221; นั่นเอง (-*-) 
jQuery มันเอาไว้ประยุกต์ใช้งาน มีแค่ Basic ก็สามารถทำได้ทุกอย่างแล้ว ที่เหลือก็หา plugin มานั่งแกะๆ เอาก็จะได้ทักษะเพิ่มไปเรื่อยๆ เอง ยิ่งใครมีพื้น js แน่นอยู่แล้ว แทบจะเรียกว่า ของหมูๆเลย ฉะนั้นในระหว่างที่ยังนึก ว่าจะอัพไรดีไม่ออก ผมก็จะเอาความรู้ ที่พอจะมีตกค้างมาบ้าง มาอัพเดทแทนไปพลางๆ 555
แต่ถ้าใครอยากรู้หรือสนใจอะไรเพิ่มเติมเกี่ยวกับ jQuery ก็หลังไมค์ มาได้ครับ ถ้ารู้ก็จะเอามาอัพเดทให้ แต่ถ้าไม่รู้ผมก็จะแกล้งทำเป็นรู้ แล้วไปหาบทความชาว ต่างชาติต่างเมือง มาแปลเป็นไทยให้ WoW!
เอาล่ะๆ เริ่มอะไรที่มันมีเนื้อหาสาระกันดีกว่า xPath เป็นภาษาที่เอาไว้ ไล่ nodes ในเอกสาร XML (จริงๆ ใน json ก็มีคนเอามาประยุกต์เลียนแบบ) ซึ่งอยากบอกว่ามันเป็นอะไรที่ [...]]]></description>
			<content:encoded><![CDATA[<p>เกริ่นกันก่อน หลายๆคนอาจจะเริ่ม ตะหงิดๆ ทำไมพักนี้ผม อัพเดทอะไร หลายๆอย่างไม่ได้ เกี่ยวกับ jQuery เลย นั่นก็เพราะว่า &#8220;นึกไม่ออก&#8221; นั่นเอง (-*-) </p>
<p>jQuery มันเอาไว้ประยุกต์ใช้งาน มีแค่ Basic ก็สามารถทำได้ทุกอย่างแล้ว ที่เหลือก็หา plugin มานั่งแกะๆ เอาก็จะได้ทักษะเพิ่มไปเรื่อยๆ เอง ยิ่งใครมีพื้น js แน่นอยู่แล้ว แทบจะเรียกว่า ของหมูๆเลย ฉะนั้นในระหว่างที่ยังนึก ว่าจะอัพไรดีไม่ออก ผมก็จะเอาความรู้ ที่พอจะมีตกค้างมาบ้าง มาอัพเดทแทนไปพลางๆ 555<span id="more-46"></span></p>
<p>แต่ถ้าใครอยากรู้หรือสนใจอะไรเพิ่มเติมเกี่ยวกับ jQuery ก็หลังไมค์ มาได้ครับ ถ้ารู้ก็จะเอามาอัพเดทให้ แต่ถ้าไม่รู้ผมก็จะแกล้งทำเป็นรู้ แล้วไปหาบทความชาว ต่างชาติต่างเมือง มาแปลเป็นไทยให้ WoW!</p>
<p>เอาล่ะๆ เริ่มอะไรที่มันมีเนื้อหาสาระกันดีกว่า <a href="http://en.wikipedia.org/wiki/XPath" target="_blank"><strong>xPath</strong></a> เป็นภาษาที่เอาไว้ ไล่ nodes ในเอกสาร XML (จริงๆ ใน json ก็มีคนเอามาประยุกต์เลียนแบบ) ซึ่งอยากบอกว่ามันเป็นอะไรที่ โครตสะดวกเลย ลองมาดูตัวอย่างกันดีกว่า</p>
<p><strong>XML File: simple.xml</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;rss<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;book</span> <span class="re0">id</span>=<span class="st0">&quot;bk01&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;author<span class="re2">&gt;</span></span></span>Mr.Tee++;<span class="sc3"><span class="re1">&lt;/author<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>jQuery Developer&#8217;s Guide<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;genre<span class="re2">&gt;</span></span></span>Computer<span class="sc3"><span class="re1">&lt;/genre<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;price<span class="re2">&gt;</span></span></span>44.95<span class="sc3"><span class="re1">&lt;/price<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/book<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;book</span> <span class="re0">id</span>=<span class="st0">&quot;bk02&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;author<span class="re2">&gt;</span></span></span>Mr.Tee++;<span class="sc3"><span class="re1">&lt;/author<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>XML Developer&#8217;s Guide<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;genre<span class="re2">&gt;</span></span></span>Computer<span class="sc3"><span class="re1">&lt;/genre<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;price<span class="re2">&gt;</span></span></span>5.95<span class="sc3"><span class="re1">&lt;/price<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/book<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2"><span class="sc3"><span class="re1">&lt;book</span> <span class="re0">id</span>=<span class="st0">&quot;bk03&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;author<span class="re2">&gt;</span></span></span>Not me<span class="sc3"><span class="re1">&lt;/author<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>To be a hacker<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;genre<span class="re2">&gt;</span></span></span>Internet<span class="sc3"><span class="re1">&lt;/genre<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;price<span class="re2">&gt;</span></span></span>10.50<span class="sc3"><span class="re1">&lt;/price<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2"><span class="sc3"><span class="re1">&lt;/book<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;book</span> <span class="re0">id</span>=<span class="st0">&quot;bk04&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;author<span class="re2">&gt;</span></span></span>Mr.Tee++;<span class="sc3"><span class="re1">&lt;/author<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Google Adsense<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;genre<span class="re2">&gt;</span></span></span>SEO<span class="sc3"><span class="re1">&lt;/genre<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;price<span class="re2">&gt;</span></span></span>70<span class="sc3"><span class="re1">&lt;/price<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/book<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/rss<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>สมมุติผมมี ตัวอย่าง xml ดังชุดข้างบน ผมจะลองมาดูว่าผมจะหาข้อมูลของ xml ชุดนี้โดยใช้ xPath เข้าช่วยได้อย่างไรบ้าง</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;strong&gt;PHP <a href="http://www.php.net/file"><span class="kw3">file</span></a>: xpathdemo.php&lt;/strong&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$xml</span> = simplexml_load_file<span class="br0">&#40;</span><span class="st0">&#8217;simple.xml&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>ตัวอย่างที่ 1 การหาค่า attribute = &#8220;xxx&#8221;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$res</span> = <span class="re0">$xml</span>-&gt;<span class="me1">xPath</span><span class="br0">&#40;</span><span class="st0">&#8216;//book[@id=&quot;bk01&quot;]&#8216;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* ผลลัพธ์</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">(</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; [0] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [@attributes] =&gt; Array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [id] =&gt; bk01</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [author] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [title] =&gt; jQuery Developer&#8217;s Guide</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [genre] =&gt; Computer</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [price] =&gt; 44.95</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">)*/</span></div>
</li>
</ol>
</div>
<p>ตัวอย่างนี้จะเป็นการหา author ที่ไม่ใช้ Not me ดังนั้นผลลัพธ์ จะได้ออกมา 3 records ซึ่ง author จะเท่ากับ Mr.Tee++;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$res</span> = <span class="re0">$xml</span>-&gt;<span class="me1">xPath</span><span class="br0">&#40;</span><span class="st0">&#8216;//author[not(.=&quot;Not me&quot;)]&#8216;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* ผลลัพธ์</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">(</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; [0] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; [1] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; [2] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">)*/</span></div>
</li>
</ol>
</div>
<p>ตัวอย่างนี้จะเป็นการหา price ที่มากกว่า 40 ขึ้นไป รวมทั้งสั่งให้ point node ไปที่ parent ของมันซึ่งก็คือ หลังจากที่มันหาค่าได้ node จะชี้ไปอยู่ที่ price แต่ผมต้องการ fields อื่นที่เป็น siblings ของมันด้วย</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$res</span> = <span class="re0">$xml</span>-&gt;<span class="me1">xPath</span><span class="br0">&#40;</span><span class="st0">&#8216;//price[.&gt;40]/parent::*&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* ผลลัพธ์</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Array</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">(</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; [0] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [@attributes] =&gt; Array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [id] =&gt; bk01</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [author] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [title] =&gt; jQuery Developer&#8217;s Guide</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [genre] =&gt; Computer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [price] =&gt; 44.95</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; [1] =&gt; SimpleXMLElement Object</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [@attributes] =&gt; Array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [id] =&gt; bk04</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [author] =&gt; Mr.Tee++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [title] =&gt; Google Adsense</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [genre] =&gt; SEO</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [price] =&gt; 70</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; )</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>สุดท้ายเป็นตัวอย่างการ Count ค่า genre = computer ซึ่งไม่มีอะไรมากทำแค่นี้ (เริ่มขี้เกียจอธิบาย)^^</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$xml</span>-&gt;<span class="me1">xPath</span><span class="br0">&#40;</span><span class="st0">&#8216;//genre[.=&quot;Computer&quot;]&#8216;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>เอาล่ะ นี่เป็นแค่น้ำจิ้มจริงๆ xPath ทำไรได้เยอะกว่านี้แน่นอน ลองไปถามพี่ Goo เค้าสิ ท่าไม่เชื่อ วันนี้ลาไปก่อน หวัดดี </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/07/20/how-to-use-xpath/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ข้อแตกต่างระหว่าง DOM กับ SAX ในการทำงานกับ XML</title>
		<link>http://www.jquerytips.com/2008/07/15/xml-dom-sax/</link>
		<comments>http://www.jquerytips.com/2008/07/15/xml-dom-sax/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 08:08:34 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[XML]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[SAX]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/07/15/xml-dom-sax/</guid>
		<description><![CDATA[วันนี้มาปูพื้นเรื่อง XML กันอีกสักหน่อย การใทำงานกับเอกสาร XML เราจะทำงานผ่าน &#8220;xml parser&#8221; เพื่อเป็นการดึงชุดข้อมูลมาทำงาน ซึ่งจะมีอยู่ 2 วิธีหลักๆ ก็คือ DOM และ SAX
โดยทั้ง 2 กันต่างกันยังไงบ้างมาดูกัน
DOM (Document object model)
1. การเข้าถึงข้อมูล: เป็นการสุ่ม (random)
2. การอ่านข้อมูล: เป็นการโหลดเอกสาร XML มาทั้งหมด
3. การจัดการข้อมูล: สามารถจัดการได้ (สร้าง, แก้ไข, ลบ)
SAX (Simple API for XML)
1. การเข้าถึงข้อมูล: ตามลำดับ (sequence)
2. การอ่านข้อมูล: อ่านทีละชุด เฉพาะข้อมูลที่ต้องการเข้าถึง
3. การจัดการข้อมูล: อ่านได้อย่างเดียว
โดยการอ่านแบบ SAX จะเป็นการอ่านเฉพาะจุดที่เราต้องการเข้าถึง และถ้าต้องการเข้าถึงข้อมูลชุดอื่นๆ อีก จะมีการเรียกอ่าน เอกสาร xml ซ้ำ
ส่วนการอ่านแบบ DOM จะเป็นการเรียกเพียงครั้งเดียว [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้มาปูพื้นเรื่อง XML กันอีกสักหน่อย การใทำงานกับเอกสาร XML เราจะทำงานผ่าน &#8220;xml parser&#8221; เพื่อเป็นการดึงชุดข้อมูลมาทำงาน ซึ่งจะมีอยู่ 2 วิธีหลักๆ ก็คือ <strong>DOM</strong> และ <strong>SAX</strong></p>
<p>โดยทั้ง 2 กันต่างกันยังไงบ้างมาดูกัน</p>
<p><strong>DOM (Document object model)</strong><br />
1. การเข้าถึงข้อมูล: เป็นการสุ่ม (random)<br />
2. การอ่านข้อมูล: เป็นการโหลดเอกสาร XML มาทั้งหมด<br />
3. การจัดการข้อมูล: สามารถจัดการได้ (สร้าง, แก้ไข, ลบ)</p>
<p><strong>SAX (Simple API for XML)</strong><br />
1. การเข้าถึงข้อมูล: ตามลำดับ (sequence)<br />
2. การอ่านข้อมูล: อ่านทีละชุด เฉพาะข้อมูลที่ต้องการเข้าถึง<br />
3. การจัดการข้อมูล: อ่านได้อย่างเดียว<span id="more-43"></span></p>
<p>โดยการอ่านแบบ SAX จะเป็นการอ่านเฉพาะจุดที่เราต้องการเข้าถึง และถ้าต้องการเข้าถึงข้อมูลชุดอื่นๆ อีก จะมีการเรียกอ่าน เอกสาร xml ซ้ำ<br />
ส่วนการอ่านแบบ DOM จะเป็นการเรียกเพียงครั้งเดียว และจัดเอกสารให้อยู่ในรูปแบบ &#8220;Tree&#8221; เมื่อจะเข้าถึงข้อมูล node อื่นๆ ก็สามารถเข้าถึงได้เลย ไม่ต้องเรียกซ้ำ</p>
<p><em>ทั้ง 2 ตัวมีข้อดีข้อเสีย ต่างกันคือ&#8230;</em><br />
ถ้าข้อมูลมีจำนวนมาก ทั้ง 2 ตัวจะกินหน่วยความจำไม่ต่างกัน แต่ SAX จะอ่านข้อมูลเร็วกว่า<br />
แต่ถ้าข้อมูลมีจำนวนมาก การบริโภคหน่วยความจำของ SAX จะมีมากกว่าค่อนข้างเยอะ ดังนั้นการเข้าถึงข้อมูลของ SAX ก็จะช้าตามลงไปด้วย</p>
<p>แต่ท้ายที่สุด เมื่อโหลดเอกสารเสร็จทั้งหมดแล้ว SAX ก็จะมีความเร็วเหนือกว่า DOM</p>
<p>สำหรับ PHP5 ลองศึกษาการใช้งานของ ทั้ง 2 วิธีได้ตาม link ด้านล่างเลยครับ<br />
1. <a href="http://www.php.net/manual/en/book.simplexml.php" target="_blank">วิธีแบบ SAX</a><br />
2. <a href="http://th2.php.net/manual/en/class.domdocument.php" target="_blank">วิธีแบบ DOM</a></p>
<p>เอาล่ะ คิดว่าบทความครั้งนี้ คงช่วยให้เพื่อนๆ ตัดสินใจถูก ว่าในคราวหน้า เราควรจะเลือกใช้งานแบบไหนดี เวลาเจอ ไฟล์ XML มากองตรงหน้านะครับ ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/07/15/xml-dom-sax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.jquerytips.com/song/move_bitch.mp3" length="6541825" type="audio/mpeg" />
		</item>
		<item>
		<title>มาอ่าน XML แบบง่ายๆ ด้วย SimpleXML</title>
		<link>http://www.jquerytips.com/2008/07/06/how-to-use-php-simplexml/</link>
		<comments>http://www.jquerytips.com/2008/07/06/how-to-use-php-simplexml/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 04:09:21 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/2008/07/06/how-to-use-php-simplexml/</guid>
		<description><![CDATA[จำได้มั้ยครับ สมัยก่อนเวลาเราจะอ่าน xml โดยใช้ php ที ต้องไปใช้คำสั่งตระกูล xml_parser ที่แสนวุ่นวาย มาจน PHP5 เพิ่มคำสั่ง simplexml มา และแล้วทุกอย่างก็เปลี่ยนไปตลอดกาล&#8230;.
คำสั่ง simplexml เป็น extension ที่เริ่มมีมาใน PHP5 นี้เอง ชุดคำสั่งสามารถช่วยเราจัดการ xml ได้อย่างสบายมือ หยั่งกะท่อง array ^^ วันนี้ผมจะมา อธิบายแค่ชุดคำสั่งที่ใช้ในการ read เท่านั้นก่อน จะได้ไม่เป็นการยากเกินไป 
เอาละเบื้องต้นหา xml เป้าหมายกันก่อน เอาเป็น hi5 นี่ล่ะว้า คนเล่นเยอะดี



&#60;?php


$url = &#34;http://api.hi5.com/rest/feed/albumlist/106835745&#34;;


$xmlBase = file_get_contents&#40;$url&#41;;


// SimpleXML ไม่ชอบ xml ในรูปแบบ &#60;atom:field&#62; เราจึง replace มันออกไปก่อน


$xmlstr = preg_replace&#40;&#34;/(&#60;\/?)(\w+):([^&#62;]*&#62;)/&#34;, &#34;$1$2$3&#34;, $xmlBase&#41;;


&#160;


// [...]]]></description>
			<content:encoded><![CDATA[<p>จำได้มั้ยครับ สมัยก่อนเวลาเราจะอ่าน xml โดยใช้ php ที ต้องไปใช้คำสั่งตระกูล xml_parser ที่แสนวุ่นวาย มาจน PHP5 เพิ่มคำสั่ง <a href="http://th.php.net/manual/en/book.simplexml.php" target="_blank">simplexml</a> มา และแล้วทุกอย่างก็เปลี่ยนไปตลอดกาล&#8230;.</p>
<p>คำสั่ง simplexml เป็น extension ที่เริ่มมีมาใน PHP5 นี้เอง ชุดคำสั่งสามารถช่วยเราจัดการ xml ได้อย่างสบายมือ หยั่งกะท่อง array ^^ วันนี้ผมจะมา อธิบายแค่ชุดคำสั่งที่ใช้ในการ read เท่านั้นก่อน จะได้ไม่เป็นการยากเกินไป <span id="more-40"></span></p>
<p>เอาละเบื้องต้นหา xml เป้าหมายกันก่อน เอาเป็น <a href="http://www.hi5.com" targte="blank">hi5</a> นี่ล่ะว้า คนเล่นเยอะดี</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$url</span> = <span class="st0">&quot;http://api.hi5.com/rest/feed/albumlist/106835745&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$xmlBase</span> = <a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// SimpleXML ไม่ชอบ xml ในรูปแบบ &lt;atom:field&gt; เราจึง replace มันออกไปก่อน</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$xmlstr</span> = <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;/(&lt;<span class="es0">\/</span>?)(<span class="es0">\w</span>+):([^&gt;]*&gt;)/&quot;</span>, <span class="st0">&quot;$1$2$3&quot;</span>, <span class="re0">$xmlBase</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// วนลูปโดยทำการชี้ ไปที่ชุดที่เราต้องการได้เลย</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$xml</span>-&gt;<span class="me1">atomentry</span> <span class="kw1">as</span> <span class="re0">$item</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// ทำการดึง content ออกมา</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$item</span>-&gt;<span class="me1">atomcontent</span>.<span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>เพียงเท่านี้ครับ ง่ายมั้ยล่ะ นอกจากนี้ simplexml ยังมีของวิเศษอีกชิ้นนึง นั่นก็คือ xpath ครับ</p>
<p>xpath เป็นตัวที่ทำให้เราข้ามชุดข้อมูลที่เราไม่ต้องการได้ทันทีเลย</p>
<p>เช่นผมมี xml ตามแบบด้านล้างนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$string</span> = &lt;&lt;&lt;XML</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">&lt;a&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;b&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &lt;c&gt;text&lt;/c&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;c&gt;stuff&lt;/c&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;/b&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;d&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;c&gt;code&lt;/c&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;&lt;/d&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/a&gt;</span></div>
</li>
<li class="li1">
<div class="de1">XML;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>ผมสามารถที่จะเข้าถึง ข้อมูลชุด c ได้เลย โดยเขียนแบบนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$xml</span> = <span class="kw2">new</span> SimpleXMLElement<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$result</span> = <span class="re0">$xml</span>-&gt;<span class="me1">xpath</span><span class="br0">&#40;</span><span class="st0">&#8216;b/c&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>หรือขี้เกียจหนักเลยผมจะใช้แบบนี้ก็ยังได้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$result</span> = <span class="re0">$xml</span>-&gt;<span class="me1">xpath</span><span class="br0">&#40;</span><span class="st0">&#8216;//c&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>ไม่ต้องเสียเวลามาไล่ทีละชั้นเหมือน array</p>
<p>นอกจากนี้ยังมีคำสั่งที่ต้องศึกษาเพิ่มเติมกันเอาอีกนิดหน่อยครับ คือพวกนี้</p>
<p>SimpleXMLElement->asXML<br />
SimpleXMLElement->attributes<br />
SimpleXMLElement->children</p>
<p>ปล. ตัวอย่างที่ผมเขียนให้ถ้าเอาไปศึกษาดีๆ สามารถดูรูปคนที่เค้าตั้งไว้ไม่ให้ดูด้วยนะ อิอิ ^^ </p>
<p>แบบนี้ไงล่ะ<br />
<font color="red">http://xxx.jquerytips.com/SimpleXML/readATOM.php?userId=<strong>xxxxxx</strong></font></p>
<p>ใส่ userId ของคนที่คุณอยากดูลงไป วุ ฮ่า ฮ่า ฮ่า</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2008/07/06/how-to-use-php-simplexml/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
