工作笔记3——通过XSL转化XML

工作笔记3——通过XSL转化XML

  • < xsl:template >元素
  • 只改动某一结点下的数据
  • XSL合并多个XML文件

< xsl:template >元素

  • XSL样式表是由一个一个的模板组成的。每个XSL样式表至少要包含一个模板。
  • 模板定义不能嵌套,也即不能在一个模板内部,再定义一个模板。
  • 模板必须是XSL文件中根元素< xsl:stylesheet >的直接子元素。
  • xsl 模板匹配的工作流程,链接。

只改动某一结点下的数据

使用场景:首先判断某一结点的值,如果为情况一,则改动另一结点为值一;如果为情况二,则改动另一结点为值二,其余结点均不变。
基本框架如下:


<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
	<xsl:output method="xml" indent="no"/>
	<xsl:template match="node()|@*" name="identity">
		<xsl:choose>
			<xsl:when test="@*">
				<xsl:copy-of select="."/>
			xsl:when>
			<xsl:otherwise>
				<xsl:copy>
					<xsl:apply-templates/>
				xsl:copy>
			xsl:otherwise>
		xsl:choose>
	xsl:template>
	<xsl:template match="需改动节点的xpath" name="identity">
		
	xsl:template>
xsl:stylesheet>

注解:

  • exclude-result-prefixes="fn"表示在最后的输出结果xml文件中,省略掉xmlns:fn="http://www.w3.org/2005/xpath-functions” 这一句声明,如果没有exclude-result-prefixes="fn"的话,在改动结点的标签后面,会出现xmlns:fn="http://www.w3.org/2005/xpath-functions” ,导致与原来结点不一样,所以这一句一定要加。
  • 代表匹配到每一个结点
  • xsl:copy-of 表示将当前节点的 Namespace 节点、子节点以及属性复制,注意会复制属性;而 xsl:copy 表示将当前节点的 Namespace 节点复制,但是当前节点的子节点和属性不会被自动复制,注意属性不会被复制。所以需要加一个选择,如果该结点有属性test="@*",则用xsl:copy-of,如果没有属性,则用xsl:copy。
  • < xsl:copy >< xsl:apply-templates/ >< /xsl:copy >,表示对每一个匹配的结点,应用下方的模板(apply-templates可以理解为调用子函数),如果找到可以匹配的模板,则按重新写的逻辑进行改动,如果没有找到相匹配的模板,则复制原来的一份,保持不变。

XSL合并多个XML文件

有时我们需要用xsl处理两个xml文件,根据一个xml文件中的内容来改动另一个xml文件中的内容,处理方法参见此链接。

你可能感兴趣的:(工作笔记3——通过XSL转化XML)