Wenzi

工作中使用xslt的总结

蚊子前端博客
发布于 2016/06/21 00:00
我们使用xslt将接口中的xml接口转换成html结构的数据输出到页面中,这里也简单的总结一下,方便后续的使用

我们使用 xslt 将接口中的 xml 接口转换成 html 结构的数据输出到页面中,这里也简单的总结一下,方便后续的使用。

1. 使用子节点的值进行过滤 #

有时候会出现这种情况:有很多并列的节点item,但是只能根据这个 item 节点里面的节点art_type来过滤出这些item节点来。比如 art_type有 0 和 1 两个值,我现在只想要 art_type 值为 1 的item节点:

<xsl:for-each select="item/art_type[text()=1]/parent::*">
	<xsl:if test="position() >= 1 and position() <= 3">
		<xsl:call-template name="one"></xsl:call-template>
	</xsl:if>
</xsl:for-each>

这里我们能使用parent关键词回到上一个节点。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。

位置路径表达式

例子 结果
child::book 选取所有属于当前节点的子元素的 book 节点。
attribute::lang 选取当前节点的 lang 属性。
child::* 选取当前节点的所有子元素。
attribute::* 选取当前节点的所有属性。
child::text() 选取当前节点的所有文本子节点。
child::node() 选取当前节点的所有子节点。
descendant::book 选取当前节点的所有 book 后代。
ancestor::book 选择当前节点的所有 book 先辈。
ancestor-or-self::book 选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
child::*/child::price 选取当前节点的所有 price 孙节点。

2. 将参数传递给另一个模板 #

这里有个模板 C,模板 A 和模板 B 都会调用它,但是逻辑上或其他地方只有一点点的区别,也没必要写一个新的模板,只需用一个参数区分即可。

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" encoding="gb2312" indent="yes"/>
	<xsl:template match="/root">
		<xsl:call-template name="one_list">
			<xsl:with-param name="page_name">xiaoming</xsl:with-param>
		</xsl:call-template>

		<xsl:call-template name="one_list">
			<xsl:with-param name="page_name">xiaohong</xsl:with-param>
		</xsl:call-template>
	</xsl:template>

	<xsl:template name="one_list">
		<xsl:param name="page_name" />

		<xsl:if test="$page_name = 'xiaoming'">
			<p>hello xiaoming</p>
		</xsl:if>
	</xsl:template>
</xsl:stylesheet>

3. 渲染模板为节点添加属性 #

在用 xslt 将 xml 转换为 html 时,经常会给标签添加属性值,比如 a 标签的href,img 标签的src等。通常有两种方式都可以。

<a target="_blank" class="pic">
  <xsl:attribute name="href">
    <xsl:value-of select="url" />
  </xsl:attribute>
</a>

<a href="{url}" target="_blank" class="pic"></a>

都是可以的。

4. 检测某个节点存在且不为空 #

<xsl:choose>
    <xsl:when test="count(mimgs) > 0 and string-length(mimgs/imgurl32) > 0 ">
        <xsl:value-of select="mimgs/imgurl32"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="img"/>
    </xsl:otherwise>
</xsl:choose>

5. 总结 #

对 xslt 不太熟悉,这也是工作过程中总结出来的,在接下来的工作中,还会有更多的总结。

标签:xsltxml
阅读(764)
Simple Empty
No data