建网站费用,濮阳招聘大濮网,重庆seo搜索引擎优化优与略,福田做网站公司eXtensible Stylesheet Language Transformations本身是XSL规范的一部分#xff0c;专门用于对XML的树型数据进行重组转换#xff0c;并可以以各种格式输出 示例
//hello.xml
?xml version1.0
?xml-stylesheet typetext/xsl href专门用于对XML的树型数据进行重组转换并可以以各种格式输出 示例
//hello.xml
?xml version1.0
?xml-stylesheet typetext/xsl hrefhello.xslt?
messagehello/message
//hello.xslt
?xml version1.0 encodingUTF-8?
xsl:stylesheet version2.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform!-- transform the input root --xsl:template match/htmlbodyh1xsl:value-of selectmessage//h1/body/html/xsl:template
/xsl:stylesheet
//output
htmlbodyh1hello/h1/body
/html
XML文档中告诉解析器可以用一个XSLT来进行转换XSLT文档本身其实就是一个XML文档但XSLT的根元素必须是“http://www.w3.org/1999/XSL/Transform”命名空间中的stylesheet元素浏览器如果打开XML文件会发现XML可以被一个XSLT规则来转换所以就转换于是显示的就是转换后的内容即output在XSLT中定义了一个模板match”/”匹配的是文档节点即作为整个转换工作的入口类似main函数 模板
模板用来匹配XML中的节点并对匹配的节点做转换
模板的声明
xsl:template
matchPattern nameQName modeQName priorityNumber asSequence-type
!-- other xsl elements and literal result elements --
......
/xsl:template
match用于选取匹配的节点是一个相对或绝对的XPathname为模板的名字可以通过name来调用mode可以进一步区分有相同name的模板priority用于对可以用于同一个节点的模板间区分优先级值大优先as为该模板的返回类型一般无须指定表示可以输出任何内容
模板的调用 1、xsl:apply-templates
xsl:template match/ 模板 1xsl:apply-templates/
/xsl:template
xsl:template matchmessage 模板 2.....
/xsl:template
xsl:apply-templates的广度优先调用 在入口模板中调用了xsl:apply-templates表面在文档节点下广度优先、逐层向下的遍历节点 模板2采用了相对路径意味着一旦遍历到一个message节点这个模板就匹配上就可以调用对当前的message节点进行处理 语法
xsl:apply-templates selectExpression modeQName......
/xsl:apply-templates
select属性表示下面的遍历只遍历我select的节点如
xsl:apply-templates selectmessage/
那么就只会遍历所有的message节点并调用匹配该节点的模板来处理
mode属性用于匹配模板对于符合该节点的模板同时还需要满足相同的mode才会被调用 2、xsl:call-template
xsl:call-template name qname!-- Content: xsl:with-param* --
/xsl:call-template
call-template则是直接调用指定name的模板来处理 内置模板
内置模板的作用就是已经实现好了所有的遍历过程而我们只需要写好相应的模板内置模板就会在遍历的时候自动的调用我们写的模板来处理。对于我们没有编写模板来处理的节点内置模板默认是输出其内容的如果不希望输出则一般需要我们写一个模板去覆盖内置模板的输出 XSLT转换功能
xsl:value-of 提取文本内容 取指为一个XPath表达式
xsl:value-of select expression /
xsl:text来输出文本内容
//xml
message
subjectI/subject
predicateLove/predicate
objectYou/object
/message
//xslt1
xsl:template matchmessagexsl:value-of selectsubject/ xsl:value-of selectpredicate/ xsl:value-of selectobject/
/xsl:template
//output1
ILoveYou
//xslt2
xsl:template matchmessagexsl:value-of selectsubject/xsl:text /xsl:textxsl:value-of selectpredicate/xsl:text /xsl:textxsl:value-of selectobject/
/xsl:template
//output2
I Love You
xsl:for-each来批量处理
xsl:for-each select Expression...循环处理代码...
/xsl:for-each
xsl:sort对批量处理的内容进行排序 这种批量处理可以是xsl:for-each也可以是xsl:apply-templates
xsl:sort select expression data-type { text | number | QName }order { ascending | descending } case-order { upper-first | lower-first } /
xsl:if进行判断与分支
xsl:if test boolean-expression...条件满足时所执行的指令...
/xsl:if
//示例
xsl:template matchNamexsl:if testposition()!last() lixsl:value-of select.//li/xsl:if
/xsl:template
xsl:choose、xsl:when、xsl:otherwise进行多分支
xsl:choosexsl:when testcase1.../xsl:whenxsl:when testcase2.../xsl:whenxsl:otherwise...default.../xsl:otherwise
/xsl:choose
xsl:copy复制原节点仅复制当前节点不复制子元素和属性
xsl:template match*|node()xsl:copyxsl:apply-templates select*|node()//xsl:copy
/xsl:template
xsl:copy-of复制整个节点
xsl:template match/xsl:copy-of select./
/xsl:template
xsl:element 生成 XML 元素
xsl:template matchmessagexsl:element name“new-messagexsl:vlaue-of select.//xsl:element
/xsl:template
xsl:attribute生成属性
xsl:template matchmessagexsl:copyxsl:attribute namecontentxsl:value-of select.//xsl:attribute/xsl:copy
/xsl:template