由于项目的需要,我用xsl 编写了递归解析树形结构,原始xml如下:
<?xml version="1.0" encoding="utf-8"?>
<WMS_Capabilities>
<Service>
<Name>SIT WMS demo</Name>
<Title>SIT WMS demo</Title>
<Abstract>SIT WMS demo</Abstract>
<KeywordList>
<Keyword>WMS</Keyword>
<Keyword>SIT</Keyword>
<Keyword>ICT</Keyword>
</KeywordList>
</Service>
<Capability>
<Layer id="1">
<Name>China</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>1222</TypeName>
<CRS>CRS:84</CRS>
<Layer id="1,1">
<Name>Provinces</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>Provinces</TypeName>
<CRS>CRS:84</CRS>
<Layer id="1,1,1">
<Name>Provinces</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>Provinces</TypeName>
<CRS>CRS:84</CRS>
</Layer>
</Layer>
<Layer id="1,2">
<Name>China_point</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>China_line</TypeName>
<CRS/>
</Layer>
<Layer id="1,3">
<Name>China_point</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>China_point</TypeName>
<CRS>CRS:84</CRS>
</Layer>
</Layer>
</Capability>
</WMS_Capabilities>
转换的xsl如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="/WMS_Capabilities/Capability/Layer"></xsl:apply-templates>
</xsl:template>
<xsl:template match="Layer">
<table>
<tbody>
<tr οnclick="javascript:doAction(this)">
<xsl:attribute name="id"><xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<th>Layer:</th>
<td><xsl:value-of select="./Name"/></td>
<td style="display:none"><xsl:value-of select="./Title"/></td>
<td style="display:none"><xsl:value-of select="./TypeName"/></td>
<td style="display:none"><xsl:value-of select="./CRS"/></td>
</tr>
<tr>
<td> </td>
<td colspan="4"><xsl:apply-templates select="Layer"></xsl:apply-templates></td>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
转换后如下:
<table><tbody><tr οnclick="javascript:doAction(this)" id="1"><th>Layer:</th><td>China</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">1222</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4">
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,1"><th>Layer:</th><td>Provinces</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">Provinces</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4">
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,1,1"><th>Layer:</th><td>Provinces</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">Provinces</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,2"><th>Layer:</th><td>China_point</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">China_line</td><td style="display:none"></td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,3"><th>Layer:</th><td>China_point</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">China_point</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<?xml version="1.0" encoding="utf-8"?>
<WMS_Capabilities>
<Service>
<Name>SIT WMS demo</Name>
<Title>SIT WMS demo</Title>
<Abstract>SIT WMS demo</Abstract>
<KeywordList>
<Keyword>WMS</Keyword>
<Keyword>SIT</Keyword>
<Keyword>ICT</Keyword>
</KeywordList>
</Service>
<Capability>
<Layer id="1">
<Name>China</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>1222</TypeName>
<CRS>CRS:84</CRS>
<Layer id="1,1">
<Name>Provinces</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>Provinces</TypeName>
<CRS>CRS:84</CRS>
<Layer id="1,1,1">
<Name>Provinces</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>Provinces</TypeName>
<CRS>CRS:84</CRS>
</Layer>
</Layer>
<Layer id="1,2">
<Name>China_point</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>China_line</TypeName>
<CRS/>
</Layer>
<Layer id="1,3">
<Name>China_point</Name>
<Title>aggregation of 3 layers</Title>
<TypeName>China_point</TypeName>
<CRS>CRS:84</CRS>
</Layer>
</Layer>
</Capability>
</WMS_Capabilities>
转换的xsl如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="/WMS_Capabilities/Capability/Layer"></xsl:apply-templates>
</xsl:template>
<xsl:template match="Layer">
<table>
<tbody>
<tr οnclick="javascript:doAction(this)">
<xsl:attribute name="id"><xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<th>Layer:</th>
<td><xsl:value-of select="./Name"/></td>
<td style="display:none"><xsl:value-of select="./Title"/></td>
<td style="display:none"><xsl:value-of select="./TypeName"/></td>
<td style="display:none"><xsl:value-of select="./CRS"/></td>
</tr>
<tr>
<td> </td>
<td colspan="4"><xsl:apply-templates select="Layer"></xsl:apply-templates></td>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
转换后如下:
<table><tbody><tr οnclick="javascript:doAction(this)" id="1"><th>Layer:</th><td>China</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">1222</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4">
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,1"><th>Layer:</th><td>Provinces</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">Provinces</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4">
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,1,1"><th>Layer:</th><td>Provinces</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">Provinces</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,2"><th>Layer:</th><td>China_point</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">China_line</td><td style="display:none"></td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
<table><tbody><tr οnclick="javascript:doAction(this)" id="1,3"><th>Layer:</th><td>China_point</td><td style="display:none">aggregation of 3 layers</td><td style="display:none">China_point</td><td style="display:none">CRS:84</td>
</tr>
<tr>
<td />
<td colspan="4" />
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>