首先,xml文件
<?
xml version="1.0" encoding="utf-8" standalone="yes"
?>
<
锅炉
>
<
生产制造
>
<
层次1
>
<
产品编号
>
P0807-XC
</
产品编号
>
<
产品名称
>
燃油气锅炉
</
产品名称
>
<
产品型号
>
Model1-XC
</
产品型号
>
<
发卡日期
>
2008-2-26 15:12:47
</
发卡日期
>
<
监检报告编号
>
Report-XC-004
</
监检报告编号
>
<
监检单位
>
山东省特检院-XC
</
监检单位
>
<
卡号
>
30d345e6c005978c
</
卡号
>
<
企业id
>
1
</
企业id
>
<
设计图号
>
D1
</
设计图号
>
<
设计许可号
>
J1
</
设计许可号
>
<
是否发卡
>
1
</
是否发卡
>
<
完成日期
>
2008-2-21 0:00:00
</
完成日期
>
<
制造厂家
></
制造厂家
>
<
制造许可证编号
>
M1
</
制造许可证编号
>
<
质保书编号
>
XC-007
</
质保书编号
>
</
层次1
>
</
生产制造
>
</
锅炉
>
上述为获得的xml的简单示例,其中各个节点名称都是动态的,所以在xsl中不能写死。
下面贴出还算过得去的xslt文件
<?
xml version='1.0'
?>
<
xsl:stylesheet
xmlns:xsl
="http://www.w3.org/1999/XSL/Transform"
version
="1.0"
>

<
xsl:template
match
="//*"
>
<
HTML
>
<
head
>
</
head
>
<
BODY
>
<
FONT
face
="Verdana"
size
="2"
>

<
TABLE
cellspacing
="0"
cellpadding
="0"
>
<
tr
>
<
td
>

<
xsl:variable
name
="product"
select
="name()"
/>

<
xsl:for-each
select
="./*"
>
<
xsl:variable
name
="process"
select
="name()"
/>
<
xsl:for-each
select
="././*"
>
<
xsl:variable
name
="record"
select
="name()"
/>
<
table
cellspacing
="0"
cellpadding
="0"
width
="600px"
bordercolorlight
="#6699FF"
bordercolordark
="#FFFFFF"
>
<
TR
bgcolor
="#99ccff"
>
<
td
class
="info"
Width
="200px"
>
设备名称:
<
B
>
<
xsl:value-of
select
="$product"
/>
</
B
>
</
td
>
<
td
Width
="200px"
>
环节名称:
<
B
>
<
xsl:value-of
select
="$process"
/>
</
B
>
</
td
>
<
td
Width
="200px"
>
记录号:
<
B
>
<
xsl:value-of
select
="$record"
/>
</
B
>
</
td
>
</
TR
>
</
table
>

<
table
bgcolor
="#ccffcc"
cellspacing
="0"
cellpadding
="0"
width
="600px"
border
="1"
bordercolorlight
="#6699FF"
bordercolordark
="#FFFFFF"
>
<
xsl:for-each
select
="./././*"
>
<
xsl:variable
name
="nname"
select
="name()"
/>
<
TR
>
<
TD
class
="info"
Width
="200px"
>
<
xsl:value-of
select
="name()"
/>
:
</
TD
>
<
td
class
="info"
width
="400px"
>
<
B
>
<
xsl:value-of
select
="."
/>
<
xsl:text
disable-output-escaping
="yes"
>
&
nbsp;
</
xsl:text
>
</
B
>
</
td
>
</
TR
>
</
xsl:for-each
>
</
table
>
</
xsl:for-each
>

</
xsl:for-each
>

</
td
>
</
tr
>
</
TABLE
>
</
FONT
>
</
BODY
>
</
HTML
>
</
xsl:template
>
</
xsl:stylesheet
>

<xsl:template match="//*">中的"//*"表示匹配xml文档的根节点下的所有节点,这里因为要获取根节点的名称,所以不能直接匹配"/"(全文档)
<xsl:variable name="product" select="name()"/>
定义了变量product 用于存放根节点名称。select="name()"只能用于取得当前匹配层的节点名称,这点需要注意。再者,variable变量只能定义一次值,不能改变其值,且作用域限于当前template。
<xsl:for-each select ="./*"> 循环操作 select指定循环的节点匹配。
select="./*" 表示循环下一层节点。./表示在template指定的层数下移一层,*表示所有节点。
其中指定select=value 时 value可有多种表达方式。可以指定为具体的节点名称,如 select = "生产制造“ 如果能够确定节点名称的话。
也可以加入判定条件,如 select = "./*[name()=生产制造" 或者 select="./*[name()=$product]" 这里$product是前面定义的变量。$变量名是使用变量的方法。
<xsl:value-of select="$record"/> 这里是输出该节点的内容,或者变量的值。 当你一层层扒开xml的外衣的时候,最终取得果实的就是他了。
<xsl:value-of select="nodeName"/> 表示输出接点名为nodeName的节点的ContentValue。当然也可以输出属性,属性用select="@属性名"来指定,但是这里的属性为当前层的节点的属性,如果在循环内部,即为循环的节点的属性。输出属性的时候也可以指定属性的层,如select = "*/@name"表示输出循环下每一层的name属性的值。
基本上现在掌握的也就这样吧,xslt还是很强大的,以后有机会慢慢学习吧。
5071

被折叠的 条评论
为什么被折叠?



