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

< xsl:template >元素

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

只改动某一结点下的数据

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

<?xml version="1.0" encoding="UTF-8"?>
<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:template match=“node()|@*” name=“identity”> 代表匹配到每一个结点
  • 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文件中的内容,处理方法参见此链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值