Domxml: another option outside of Expat

xiaoxiao2021-03-06  103

Overview There are many PHP XML tutorials on the Internet, but only a few show how to use DOM to resolve XML. I want to use this opportunity to show another option in addition to the widely used SAX implementation in PHP programming.

DOM (Document Object Model, Document Object Model) and SAX (Simple API for XML, XML Simple Applications) have different methods on how to resolve XML. The SAX engine is entirely the event driven. When it encounters a tag, it calls an appropriate function to handle it. This makes SAX very quickly and effective. However, he feels like it is in a set of incompetent circles. You find that you use too much global variables and conditional statements.

On the other hand, the DOM method is slightly sensitive to memory. It loads the entire XML document in a hierarchical structure. That is to say, all data form a family tree, and they are available for programming. This method is more intuitive and easier to use, and more readability is also provided.

In order to use the DOM function, you must use the '--with-dom' parameter when configuring the PHP. They are not part of the standard configuration, where there is a simple compilation.

%> ./Configure --with-dom --with-apache = .. / apache_1.3.12%> Make%> make install

Translation: Supporting the DOM practice on the Win32 platform is like this. First, copy the php_domxml.dll file under the DLLS directory in the download package to the system directory. NT, Win2k is the System32 directory, and 9x is the system directory. Second, modify the php.ini file. Point the extension_dir parameter in "Paths and Directories" to PHP_DOMXML.DLL, such as extension_dir = c: / winnt / system32; remove "Dynamic Extensions" = php_domxml.dll before the comment.

How to construct XML

Because the DOM loads a complete string or file to memory as a tree, this allows us to operate as a whole. We take this XML document as an example.

red nails </ title> <price> $ 12.99 </ price> <author> <name first = "robert" middle = "e" Last = "Howard" /> <birthdate> 9/21/1977 </ birthdate> </ author> </ book></p> <p>Data will be organized like this</p> <p>Domnode book || -> Domnode Title | || | -> Domnode text || -> Domnode Price | || | -> Domnode Text || -> Domnode Author || -> Domnode Name || -> Domnode BirthDate || -> Domnode Text</p> <p>Any text that is labeled is all nodes they own. For example, "Red Nails" is a child node of Title, "$ 12.99" is the child's child node. 1 2 3 Next Page</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-104784.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="104784" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.030</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = '50dVnFG7LPvfnYiVUoCyZt_2Bn3qnzFBo1DbIi3vndhMDPtPnbFlbSlEN_2FIukZgqBjWoDodjemsWUQP6WH5CplEA_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>