2. XSLT style form

xiaoxiao2021-03-14  191

In order to understand XSLT programming, you must first understand XML, because Xslt is not just responsible for converting XML and it is still a full-meaning XML standard language. In theory, you can write the XSLT style form responsible for your own format conversion. Of course, this is a full thing, just nothing.

Let us recall, XML is not a common language, XML is a metalanguage, which is the structure of the XML specification language (such as XSL and XHTML are XML specification languages). HTML looks very like XML, but actually violates some XML rules.

The XML language defines a label used to mark the data as an element (or can say node). For example, in terms of XHTML syntax, the

tag is equal to the start to mark a particular XML node. The XML node can contain attributes and contents. The property is the name / value pair consisting of strings. The contents can be a string and / or more XML node. This means that XML is a hierarchical structure that can represent a very complex data format. We may wish to consider one of the following XHTML fragments:
node. It is obvious that nodes are nest in
Hello World!

In the above code segments, each node has its own open-closed tag, between the two tags and the text string. The IMG node has an SRC attribute without content, next to the label is a termination slope. This termination slope and text are nested in the

node, and the latter is nested in the
.

The core idea of ​​XSLT is to establish context environments, which is also a formatted data version that exists in this environment in a specific node or complete set of nodes in the XML document. To this end, the XSLT style form is broken down into discrete template, each template being responsible for processing a type of tag in the XML document. In these templates, XSLT is to be used, transmit parameters, cyclic conditions, and other elements of converting XML.

Element is the outermost element of any XSLT style form, you want to specify the version and one or more namespaces (Namespace): < / XSL: Template>

The XSLT processor will perform after discovering an explicit call in the style form or finding the matching node in the source XML document. The most common situation is that the matching node is encountered when the XSLT processor scans XML. Matching properties use the node taken in the template with the XPath expression. Activated element outputs the content it needs. These contents may be composed of text and non-xslt tags and written directly to a new document or more XSLT elements, which are executed in the context environment of matching nodes. Tracking the context environment is impossible. The XSLT element only processes the similar nodes activated by the template.

Multiple templates can match a node. In this case, the complex rules of mode and priority attributes determine which template should be processed to process nodes. The simplest style form contains only a template that matches the given node.

For those XML documents that mainly include tag text (such as HTML), your XSLT style form is likely to contain a template for each tag you can encounter. For the XML document that contains highly structured hierarchy, your style may only contain templates for top-level nodes. These templates know the structure of the data and directly access the child node instead of jump to other templates.

For example, the sample XML file contains a shorter tag book data. It consists of a node, which includes and multiple <Chapter> nodes. This template will perform each <chapter> node within the top <book> node:</p> <p><XSL: Template Match = "/ Book / Chapter"> this is chapter <xsl: number />, entitled "<xsl: value-of select =" /> </ xsl: template></p> <p>If a XSLT processor does not match the node or its parent node, it outputs the content of the node, but doing so may include a child node that deviates from its own template. So only the style form of the template will produce the following results: <? XML Version = "1.0" eNCoding = "UTF-8"?> Stuff happensthis is chapter 1, Entitled "How it begins" this is chapter 2, Entitled "What Transpires "this is chapter 3, Entitled" Where it ends "</p> <p>Obviously, the <paragraph> node is ignored because their <Chapter> The parent node is processed, but the first <title> is not in <Chapter> so simply prints things.</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-129387.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="129387" 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.057</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 = 'hUSy9yCeI6DQwEWglnoxTCTzwZCa1aNV2R0V_2BC9M6gKH7K7tATYvFdeqTjZzxgYNLzmA402EFGybjxWE1i10SA_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>