Getting Started with XSLT - Chapter 3 Practice: XSLT Example

xiaoxiao2021-03-06  63

Directory - 1 Copy --2 Row - 3 Table - 4 Convert Form to CSV Files

1 copy

This is an example of copying all nodes (program 1). For example, from XHTML to XHTML or the like, the element can be slightly modified by most of the elements of the source and results, and the example can be modified, and only the part written code for the part needed.

Program 1: Copy.xsl

XMLns: XSL = "http://www.w3.org/1999/xsl/transform">

Use the XSL: XCOPY element to recursively copy each node.

2 row exchange

This example can exchange the rows and columns of the HTML table (program 2).

Program 2: Table.xsl

XMLns: XSL = "http://www.w3.org/1999/xsl/transform">

Because it is a swap line, just output the number of columns of the source table. Here, use

Cyclicity, in accordance with the number of columns in the first line (TR element). Use the following cycle

To take out the data to be saved in each line. Since the current node is TR [1] / TD, then use ../TD will only take the first row of TD elements. In order to remove all TD elements, it must be written into ../../tr/TD form.

The total number of new tables is saved in the variable x, and the number of rows currently being generated in the variable y is saved. therefore,

Use this condition to output data in the TD element. MOD is taken by the remainder.

The page (program 3) shown in FIG. 1 will be converted, and the output result as shown in FIG. 2 can be obtained.

Figure 1: Enter page

Program 3: Table.xml

Table </ Title></p> <p><meta http-equiv = "content-type" content = "text / html; charSet = UTF-8" /></p> <p></ hEAD></p> <p><h1> form </ h1></p> <p><body></p> <p><Table Border = "1"></p> <p><tr></p> <p><TD> A </ TD></p> <p><TD> </ td></p> <p><TD> C </ TD></p> <p><TD> Ding </ TD></p> <p><TD> glutulent </ td></p> <p></ TR></p> <p><tr></p> <p><TD> </ TD></p> <p><TD> Geng </ TD></p> <p><TD> Xin </ TD></p> <p><TD> </ td></p> <p><TD> </ td></p> <p></ TR></p> <p></ table></p> <p></ body></p> <p></ html></p> <p>Figure 2: Output page</p> <p>3 table</p> <p>The form can be seen as a two-dimensional array. Let's try to convert it into a one-dimensional array. However, only the table content is placed, so we will keep the line number and the number of the original list as the result value (program 4).</p> <p>Program 4: Database 4: DataBank.xsl</p> <p><? XML Version = "1.0"?></p> <p><XSL: Stylesheet Version = "1.0"</p> <p>XMLns: XSL = "http://www.w3.org/1999/xsl/transform"></p> <p><XSL: Template Match = "/"></p> <p><Database></p> <p><XSL: Apply-Templates Select = ".// Table" /></p> <p></ databank></p> <p></ xsl: template> <XSL: Template Match = "Table"></p> <p><xsl: for-each select = "tr"></p> <p><xsl: variable name = "row" select = "position ()" /></p> <p><xsl: for-each select = "td"></p> <p><XSL: Variable Name = "Column" SELECT = "Position ()" /></p> <p><data></p> <p><XSL: Attribute Name = "Row"></p> <p><XSL: Copy-of SELECT = "$ ROW" /></p> <p></ xsl: attribute></p> <p><XSL: Attribute Name = "Column"></p> <p><XSL: Copy-of SELECT = "$ color" /></p> <p></ xsl: attribute></p> <p><XSL: Value-of SELECT = "." /></p> <p></ data></p> <p></ xsl: for-energy></p> <p></ xsl: for-energy></p> <p></ xsl: template></p> <p></ xsl: stylesheet></p> <p>Save the line number and column number to the variable row and column.</p> <p><xsl: variable name = "row" select = "position ()" /></p> <p><XSL: Variable Name = "Column" SELECT = "Position ()" /></p> <p>Use the ROW attribute output line number, the column property outputs the number.</p> <p><XSL: Attribute Name = "Row"></p> <p><XSL: Copy-of SELECT = "$ ROW" /></p> <p></ xsl: attribute></p> <p><XSL: Attribute Name = "Column"></p> <p><XSL: Copy-of SELECT = "$ color" /></p> <p></ xsl: attribute></p> <p>When the program 3 is converted, the output is shown below.</p> <p><? XML Version = "1.0" encoding = "UTF-8"?></p> <p><Database></p> <p><data row = "1" column = "1"> Jia </ data></p> <p><data row = "1" column = "2"> <</ data></p> <p><data row = "1" column = "3"> C </ DATA></p> <p><data row = "1" column = "4"> Ding </ data></p> <p><data row = "1" column = "5"> glutulent </ data></p> <p><data row = "2" column = "1"> Hene </ data></p> <p><data row = "2" column = "2"> Geng </ data> <data row = "2" column = "3"> Xin </ data></p> <p><data row = "2" column = "4"> </ data></p> <p><data row = "2" column = "5"> </ data></p> <p></ databank></p> <p>4 Convert the form to a CSV file</p> <p>Although XSLT is generally used to convert an XML document into an XML document, it is also possible to output a format other than an XML document. Below is an example of converting an HTML document containing the Table element into a CSV (program 5).</p> <p>Program 5: csv.xsl</p> <p><? XML Version = "1.0"?></p> <p><XSL: Stylesheet Version = "1.0"</p> <p>XMLns: XSL = "http://www.w3.org/1999/xsl/transform"></p> <p><xsl: Output method = "text" encoding = "UTF-8" /></p> <p><XSL: Template Match = "/"></p> <p><XSL: Apply-Templates SELECT = ".// Tr" /></p> <p></ xsl: template></p> <p><XSL: Template Match = "TR"></p> <p><xsl: for-each select = "td"></p> <p><XSL: Value-of SELECT = "." /></p> <p><xsl: if test = "NOT (position () = last ())"></p> <p><XSL: Text>, </ XSL: Text></p> <p></ xsl: if></p> <p></ xsl: for-energy></p> <p><XSL: Text></p> <p></ xsl: text></p> <p></ xsl: template></p> <p></ xsl: stylesheet></p> <p>To output text format, you need to specify</p> <p><xsl: Output method = "text" encoding = "UTF-8" /></p> <p>Since the converted object node is a TR element that represents a row, the template rule is defined for the TR element. If it is not the last element in the row, the separator ",".</p> <p><xsl: if test = "NOT (position () = last ())"></p> <p><XSL: Text>, </ XSL: Text></p> <p></ xsl: if></p> <p>The result of converting the program 3 is shown below.</p> <p>A, B, C, Ding, glutama</p> <p>Hehe, Geng, Xin,,</p> <p>Note 1 The divided data format is separated between the individual data fields in the record.</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-112555.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="112555" 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.044</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 = 'HJz8jxxqp6JO5uwqX_2Bivqk33vZYAW9W5uGhScutvHMu0mSLCQzGhzVmnnuIW5GIP5OYHc6NIX0eCegju1tBCqw_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>