Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > PHP แจกโค้ดตัวอย่างการอ่าน/เขียน/ลบ node บน XML


[PHP] PHP แจกโค้ดตัวอย่างการอ่าน/เขียน/ลบ node บน XML

 
Topic : 125632



โพสกระทู้ ( 4,763 )
บทความ ( 8 )



สถานะออฟไลน์



คือผมทำเป็นตัวต้นแบบไว้สำหรับทดสอบการทำงาน อ่าน/เขียน/ลบ ข้อมูลบน XML รวมทั้งการกำหนด attribute ด้วย เพื่อที่จะนำไปใช้งานจริงต่อไป
เห็นว่าน่าจะเป็นประโยชน์ไว้ใช้อ้างอิงได้สำหรับคนที่อาจจะยังไม่คุ้นเคยหรืออาจจะลืมๆไป

ส่วนของการหา element โดย ID ผมคิดว่าโค้ดของผมยังทำได้ไม่ดี (ดีคือเร็วและใช้ทรัพยากรน้อยสุด) หากท่านใดเห็นทางที่ดีกว่าก็รบกวนแนะนำด้วยครับ

หวังว่าจะเป็นประโยชน์บ้างละมั้ง


Code (PHP)
001.<?php
002.$text_xml_file = 'test-domxml.xml';
003.$act = (isset($_REQUEST['act']) ? trim($_REQUEST['act']) : '');
004. 
005. 
006.// first detect that xml file exists, if not just create new xml file.
007.detectFileAndCreate();
008. 
009.if ($act == 'write') {
010.    writeXmlData();
011.} elseif ($act == 'delete') {
012.    deleteXmlDataOrFile();
013.}
014. 
015. 
016./**
017. * Delete XML data or file.
018. *
019. * @return boolean Return true on success deletion, false for otherwise.
020. */
021.function deleteXmlDataOrFile()
022.{
023.    global $text_xml_file;
024. 
025.    $ids = (isset($_REQUEST['id']) ? $_REQUEST['id'] : []);
026.    $delete = (isset($_REQUEST['delete']) ? trim($_REQUEST['delete']) : '');
027. 
028.    if ($delete === 'all') {
029.        unset($delete, $ids);
030. 
031.        if (is_file($text_xml_file) && is_writable($text_xml_file)) {
032.            unlink($text_xml_file);
033.            detectFileAndCreate();
034.            return true;
035.        }
036.        return false;
037.    } elseif ($delete === 'selected') {
038.        unset($delete);
039. 
040.        if (!empty($ids)) {
041.            $dom = new \DOMDocument('1.0', 'UTF-8');
042.            $dom->validateOnParse = true;
043.            $dom->preserveWhiteSpace = false;
044.            $dom->formatOutput = true;
045.            $dom->load($text_xml_file);
046. 
047.            if (is_array($ids)) {
048.                $delete_count = 0;
049.                foreach ($ids as $id) {
050.                    $repo_list = $dom->getElementsByTagName('list');
051.                    foreach ($repo_list as $repository) {
052.                        $items = $repository->getElementsByTagName('item');
053.                        if ($items != null) {
054.                            foreach ($items as $item) {
055.                                if ($item->getAttribute('id') == $id) {
056.                                    $item->parentNode->removeChild($item);
057.                                    $delete_count++;
058.                                }
059.                            }// endforeach; $items
060.                            unset($item);
061.                        }
062.                        unset($items);
063.                    }// endforeach; $repo_list
064.                }// endforeach; $ids
065.                unset($id);
066. 
067.                if ($delete_count > 0) {
068.                    $dom->save($text_xml_file, LIBXML_NOEMPTYTAG);
069.                    unset($delete_count, $dom, $ids);
070.                    return true;
071.                }
072.                unset($delete_count);
073.            }
074.        }// endif !empty($ids)
075.    }
076. 
077.    unset($delete, $dom, $ids);
078.    return false;
079.}// deleteXmlDataOrFile
080. 
081. 
082./**
083. * Detect XML file and create if not exists.
084. */
085.function detectFileAndCreate()
086.{
087.    global $text_xml_file;
088. 
089.    if (!file_exists($text_xml_file)) {
090.        $dom = new \DOMDocument('1.0', 'UTF-8');
091.        $dom->preserveWhiteSpace = false;
092.        $dom->formatOutput = true;
093. 
094.        $root = $dom->createElement('root');
095.        $root = $dom->appendChild($root);
096. 
097.        // plugins xml list
098.        $plugins = $dom->createElement('plugins');
099.        $plugins = $root->appendChild($plugins);
100. 
101.        $title = $dom->createElement('title');
102.        $title = $plugins->appendChild($title);
103. 
104.        $title_text = $dom->createTextNode('Plugins list');
105.        $title_text = $title->appendChild($title_text);
106. 
107.        $list = $dom->createElement('list');
108.        $list = $plugins->appendChild($list);
109. 
110.        // themes xml list
111.        $themes = $dom->createElement('themes');
112.        $themes = $root->appendChild($themes);
113. 
114.        $title = $dom->createElement('title');
115.        $title = $themes->appendChild($title);
116. 
117.        $title_text = $dom->createTextNode('Themes list');
118.        $title_text = $title->appendChild($title_text);
119. 
120.        $list = $dom->createElement('list');
121.        $list = $themes->appendChild($list);
122. 
123.        $dom->save($text_xml_file, LIBXML_NOEMPTYTAG);
124.        unset($dom, $list, $plugins, $root, $themes, $title, $title_text);
125.    }
126. 
127.    if (file_exists($text_xml_file) && !is_file($text_xml_file)) {
128.        throw new \Exception('The file "' . $text_xml_file . '" is not a file, please delete it manually at ' . realpath($text_xml_file) . '.');
129.    }
130.}// detectFileAndCreate
131. 
132. 
133./**
134. * Display XML data.
135. *
136. * @param string $section The section value is plugins or themes.
137. */
138.function displayXmlData($section)
139.{
140.    global $text_xml_file;
141. 
142.    if ($section != 'plugins' && $section != 'themes') {
143.        $section = 'plugins';
144.    }
145. 
146.    $dom = new \DOMDocument('1.0', 'UTF-8');
147.    $dom->preserveWhiteSpace = false;
148.    $dom->formatOutput = true;
149.    $dom->load($text_xml_file);
150. 
151.    $repo_list = $dom
152.            ->getElementsByTagName($section)->item(0)
153.            ->getElementsByTagName('list');
154. 
155.    if (!empty($repo_list)) {
156.        foreach ($repo_list as $repository) {
157.            $items = $repository->getElementsByTagName('item');
158.            if ($items != null) {
159.                foreach ($items as $item) {
160.                    $name = $item->getElementsByTagName('name')->item(0);
161.                    $version = $item->getElementsByTagName('version')->item(0);
162.                    echo '<label>'."\n";
163.                    echo '    <input type="checkbox" name="id[]" value="' . $item->getAttribute('id') . '"> ';
164.                    echo 'ID ' . $item->getAttribute('id') . ': ' . $name->nodeValue . ' ' . $version->nodeValue . "\n";
165.                    echo '</label><br>'."\n";
166.                    unset($name, $version);
167.                }// endforeach;
168.                unset($item);
169.            }
170.            unset($items);
171.        }// endforeach;
172.        unset($repository);
173.    }
174. 
175.    unset($dom, $repo_list);
176.}// displayXmlData
177. 
178. 
179./**
180. * Write XML data to exists XML file.
181. */
182.function writeXmlData()
183.{
184.    global $text_xml_file;
185. 
186.    $section = (isset($_REQUEST['section']) ? trim($_REQUEST['section']) : 'plugins');
187.    $id = (isset($_REQUEST['id']) ? trim($_REQUEST['id']) : '');
188.    $name = (isset($_REQUEST['name']) ? trim($_REQUEST['name']) : '');
189.    $version = (isset($_REQUEST['version']) ? trim($_REQUEST['version']) : '');
190. 
191.    if ($section != null && $name != null && $version != null && $id != null && is_numeric($id)) {
192.        $dom = new \DOMDocument('1.0', 'UTF-8');
193.        $dom->preserveWhiteSpace = false;
194.        $dom->formatOutput = true;
195.        $dom->load($text_xml_file);
196. 
197.        $repo_list = $dom
198.            ->getElementsByTagName($section)->item(0)
199.            ->getElementsByTagName('list')->item(0);
200. 
201.        $repository = $dom->createElement('item');
202. 
203.        $repository_attribute = $dom->createAttribute('id');
204.        $repository_attribute->value = $id;
205.        $repository->appendChild($repository_attribute);
206. 
207.        $name_element = $dom->createElement('name');
208.        $name_element = $repository->appendChild($name_element);
209. 
210.        $name_text = $dom->createTextNode($name);
211.        $name_text = $name_element->appendChild($name_text);
212. 
213.        $version_element = $dom->createElement('version');
214.        $version_element = $repository->appendChild($version_element);
215. 
216.        $version_text = $dom->createTextNode($version);
217.        $version_text = $version_element->appendChild($version_text);
218. 
219.        $repo_list->appendChild($repository);
220.        $dom->save($text_xml_file, LIBXML_NOEMPTYTAG);
221.    }
222. 
223.    unset($dom, $name, $name_element, $name_text, $repo_list, $repository, $section, $version, $version_element, $version_text);
224.}// writeXmlData
225. 
226. 
227.?>
228.<!DOCTYPE html>
229.<html>
230.    <head>
231.        <meta charset="utf-8">
232.        <title>Test DOM XML</title>
233.        <style type="text/css">
234.            h1, h2, h3, h4, h5, h6, p {
235.                margin: 0 0 10px 0;
236.                padding: 0;
237.            }
238.            hr {
239.                border: none;
240.                border-top: 1px solid #ccc;
241.            }
242.            pre {
243.                background-color: #333;
244.                color: #ddd;
245.                margin: 0 0 10px;
246.                overflow: hidden;
247.                overflow-wrap: break-word;
248.                overflow-y: auto;
249.                padding: 10px;
250.                white-space: pre-wrap;
251.                word-break: break-all;
252.                word-wrap: break-word;
253.            }
254.            .form-result-placeholder {
255.                display: none;
256.                margin: 0 0 20px;
257.            }
258.            .container::after {
259.                clear: both;
260.                content: '';
261.                display: table;
262.            }
263.            .container {
264.                margin: 0 auto;
265.                width: 1000px;
266.            }
267.            .xml-read {
268.                float: left;
269.                margin: 0 10px 0 0;
270.                width: 490px;
271.            }
272.            .xml-write-delete {
273.                float: left;
274.                margin: 0 0 0 10px;
275.                width: 490px;
276.            }
277.        </style>
278.    </head>
279.    <body>
280.        <div class="form-result-placeholder">
281.             
282.        </div><!--.form-result-placeholder-->
283.        <div class="container">
284.            <h1>Test read/write XML using DOM</h1>
285.            <div class="xml-read">
286.                <h2>XML content</h2>
287.                <pre><?php echo htmlspecialchars(file_get_contents($text_xml_file), ENT_QUOTES); ?></pre>
288.            </div><!--.xml-read-->
289.            <div class="xml-write-delete">
290.                <h3>Write</h3>
291.                <form method="post">
292.                    <input type="hidden" name="act" value="write">
293.                    Section:
294.                    <select name="section">
295.                        <option value="plugins">Plugins</option>
296.                        <option value="themes">Themes</option>
297.                    </select><br>
298.                    ID:
299.                    <input type="number" name="id" autocomplete="off"><br>
300.                    Name:
301.                    <input type="text" name="name" autocomplete="off"><br>
302.                    Version:
303.                    <input type="text" name="version" autocomplete="off"><br>
304.                    <button type="submit">Submit</button>
305.                </form>
306.                <hr>
307.                <h3>Delete</h3>
308.                <form method="post">
309.                    <input type="hidden" name="act" value="delete">
310.                    <h4>Plugins</h4>
311.                    <?php displayXmlData('plugins'); ?>
312.                    <h4>Themes</h4>
313.                    <?php displayXmlData('themes'); ?>
314.                    <button type="submit" name="delete" value="selected">Delete selected</button>
315.                    <button type="submit" name="delete" value="all">Delete all (delete XML file)</button>
316.                </form>
317.            </div><!--.xml-write-delete-->
318.        </div><!--.container-->
319.    </body>
320.</html>




Tag : PHP



ประวัติการแก้ไข
2016-12-05 18:49:54
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-12-05 16:08:06 By : mr.v View : 2681 Reply : 2
 

 

No. 1



โพสกระทู้ ( 74,059 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

จัดไปครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-12-06 08:57:37 By : mr.win
 

 

No. 2



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-12-08 14:23:23 By : datdit
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : PHP แจกโค้ดตัวอย่างการอ่าน/เขียน/ลบ node บน XML
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่