Home  >  Article  >  Backend Development  >  Code example using xslt to parse xml into xhtml

Code example using xslt to parse xml into xhtml

怪我咯
怪我咯Original
2017-04-10 11:21:341308browse

xsltThe basic format for parsing is as follows. Friends who need it can For reference, the basic format of using xslt for parsing is as follows: For example, the code for


is as follows:

 
 
 
 
 
 
//这里可以包含一些xhtml的标签 
 
 
 

XSL refers to the Extended Style Sheet Language (EXtensible Stylesheet Language), xsl is the style sheet of xml, xsl includes 3 parts, namely: xslt (a language used to convert XML documents), x-path (a language used to navigate in XML documents),

xsl-fo
(a language for formatting XML documents), you can find tutorials on related content at http://www.php.cn/ As described in the previous code. In that way, xslt starts with the xml version and converts it in the format of 27a152dc97efaaaf052b1ebe2186f09a...d56e9a6b61cad852bfc1882295a848f9 Since this is the first time I have come into contact with xslt, I am not familiar with it. It is not very thoroughly understood. Here is just a list of some key points I encountered when learning and using it;

1. Recursion and parameter passing methods:
With a family tree As an example, the xml file is like this:

The code is as follows:

 
 
 
   
   
    
   
   
    
   
   
    
    
   
   

Now we need to write an xslt to express the family relationship. In fact, the family relationship is a There is a family tree, so we express this relationship by outputting different levels of indentation. The largest ancestor is then indented by generation. The smallest generation is at the end and indented the most. This is the level of a tree. It came out; the following is the code of the xsl file:



The code is as follows:

 
 
 
 
 
 
 
 
 
 
 
 
 
 

name:,sex:,age:

Here we first define a parameter called level in the template, using < syntax like; Assignment,

ca90d88675738db87d7b04a71bd97b48 2f93d5c7e50a96a95fad97ec4b37ec6d ff93f53840efed4c90b2bec5eafab21d , the value of the parameter level is initially assigned as "0", and we use the value of the parameter level ($level) as the indent value, such as text-indent:{$level}em, so when rendering the xml content, the first There is no indentation for one layer. After rendering the first layer, we pass
ca90d88675738db87d7b04a71bd97b48
b4a2b9e7952364cdfdd9130f70f2f778
ff93f53840efed4c90b2bec5eafab21d
This method accumulates the value of the parameter level to achieve recursion, so that each time a layer is rendered, the parameter value is added 2, thereby realizing different levels of indentation to realize the structure of the family tree; let me also mention here that we use @+ attributes such as @name to get the value of the node attribute.

2. Use parameters to change colors on alternate lines:
Still citing the above example and the parameter level, we give the parameter +1 (odd number) instead of +2 (even number) during recursion , you can select odd-numbered rows or even-numbered rows by (.. test="$level mod 2 = 0") or (.. test="$level mod 2 = 1"). We use 3e08d16b69ca6dceb52122b5e3e896ec < ;xsl:when test="$level mod 2 = 0">...c078c4fd130ec324d38bc095c4eaeb79 b490e3a477a758f8d417150b585fd42a...d5d6e75bd640df627ff3451c7e49476a 0deb431ca822a5ae1672ac1bd025a592give The odd and even lines have different background-color
, thereby achieving the effect of changing colors on alternate lines. The specific code is as follows:
The code is as follows:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

name:,sex:,age:

name:,sex:,age:


三、符号转义以及CDATA语法:
目前碰到的只有“e84aacd5f768f485facc4bd6b8750f46” 要转义成67bffed8d39c986beaddeed3e8cd5568如果在表达式里出现这两个符号,页面在预览的时候就会报错;
另外我们需要将原文件的内容原封不动的输出来,包括换行或上面的大于和小于号等页面元素,这时候就需要CDATA这个标签, CDATA全称character data,翻译为字符数据,数据不进行转义直接输出。语法格式如下:
37257cd4c239f5a1e042c3f605185721
例如:
db42c9d5aa7564004c0daff71411f68acb884f44f2f1937276917c04c3676183]]>
在页面上显示的内容将是"aac23f448b702b8b93a75e0945ea2f62cb884f44f2f1937276917c04c3676183";
四、几个教程中并没有提到的名词:
1、local-name();例子:00361f9c2ab69ee1cbfeb1ba4da20b50,这里所表达的意思就是当前节点的名字。
2、f3619dc8969622cfe315844131c7ff3b...dc728c903cc44e1b1becadaa331990fe,call-template和apply-template的区别,简单说apply是应用,call是调用。
用apply时,引擎自动搜索与当前select指定xpath的匹配节点相匹配的template(该template必须有属性match)并使用该template进行处理,此时需要指定的是select的path。
用call时就跟其它语言调用函数一样,必须指定name属性,相应的,该template必须有name属性,当然,也可以在这时with-param(当然相应的模板中有对应的param才行,不过这个不强制要求)。通过设置mode属性可以调用同一内容的不同表现形式,这个由自己去定义。
3、count(ancestor::*)这种写法是计算当前节点有多少个祖先节点,当然 ancestor也可以用child,following-sibling等xpath关系。
五、对于要符合多条件的判断,xslt不能很好的支持:
以家族树为例,我要取一个位于第二层的,名字叫Lichao的人,如果按字面理解我们可以写成361bc00243761ed36605043ffdd1ba40...c078c4fd130ec324d38bc095c4eaeb79,但是这样写在预览xml的时候就会报错,我也想用条件里面套条件这样的写法,也不符合语法,查了很多相关的资料,没有找到很好的解决办法。
以上是在学习和使用xslt对xml进行解析的过程中的一些感想和记录,xslt很强大,有很多功能都没有涉及,当然,我还要继续学习和研究。

The above is the detailed content of Code example using xslt to parse xml into xhtml. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn