最近开发中,为啦满足开发webservic调用的需要,将业务对象序列化成web服务所定义的XML格式,但是同时又希望不在程序里面做过多的业务处理来重组数据,在同事的指点下,使用外部定义的XSL来格式序列化后的业务对象,碰到好多问题,随手写下,以备回顾:
1.碰到带同名子节点的数据时,用xsl:for_each 直接取节点名无法取得,如:
<
YMXX
>
<
YM
>
abc
</
YM
>
<
YM
>
bcd
</
YM
>
<
YM
>
adf
</
YM
>
</
YMXX
>
xsl代码:
<
YM_xx
>
<
xsl:for-each
select
="YM"
>
<
YM
><
xsl:value-of
select
="YM"
/></
YM
>
</
xsl:for-each
>
</
YM_xx
>
结果无法出数据,将循环的select改成根节点也无法解决.几经周折,正确如下:
<
xsl:apply-templates
select
="YMXX"
/>
<
xsl:template
match
="YMXX"
>
<
xsl:for-each
select
="YM"
>
<
YM
><
xsl:value-of
select
="text()"
/></
YM
>
</
xsl:for-each
>
</
xsl:template
>
另外发现,使用循环取节点时,如果父节点中有多级子节点,而且有同名的时候,一定要把级联关系在select中标明: