您好我有xml输出,如下所示
<?xml version="1.0" encoding="ISO-8859-2"?>
<shahid id="hyxq68qa41" nazwa="RAPORT BIEZACY" opis="RAPORT BIEZACY">
<ali pos="2">
<khan id="tlpyad6dn2" pos="1:2" multiplier="" timePeriodEx="" inne=":"/>
<khan id="bu13zh6dnc" pos="2:2" multiplier="" timePeriodEx="" inne=":" columnSpan="11">KOMISJA NADZORU FINANSOWEGO</khan>
<khan id="wzj6a46dne" pos="13:2" multiplier="" timePeriodEx="" inne=":"/>
</ali>
<ali pos="4">
<khan id="3lmobr88c2" pos="1:4" multiplier="" timePeriodEx="" inne=":"/>
<khan id="am4kjn88c3" pos="2:4" multiplier="" timePeriodEx="" inne=":"><html> <head></head> <body><font face='Times New Roman'> <p></p> </font></body></html></khan>
<khan id="1aij3588c4" pos="3:4" multiplier="" timePeriodEx="" inne=":"><font face='Times New Roman'></font></khan>
<khan id="6enzqb88c7" pos="4:4" multiplier="" timePeriodEx="" inne=":" columnSpan="4">Raport biezacy nr</khan>
<khan id="umdc9y88o3" pos="8:4" multiplier="" timePeriodEx="" inne=":">66</khan>
<khan id="11uzg088c9" pos="9:4" multiplier="" timePeriodEx="" inne=":">/</khan>
<khan id="ntkz6p88ca" pos="10:4" multiplier="" timePeriodEx="" inne=":">2012</khan>
<khan id="80nzo689x3" pos="11:4" multiplier="" timePeriodEx="" inne=":"/>
<khan id="purzp388cb" pos="12:4" multiplier="" timePeriodEx="" inne=":"><html> <head> </head> <body> </body></html>
</ali>
</shahid>
我希望使用XSL
转换此xml输出<table id="hyxq68qa41" nazwa="RAPORT BIEZACY" opis="RAPORT BIEZACY">
<tr pos="2">
<td id="tlpyad6dn2" pos="1:2" multiplier="" timePeriodEx="" inne=":"/>
<td id="bu13zh6dnc" pos="2:2" multiplier="" timePeriodEx="" inne=":" columnSpan="11">KOMISJA NADZORU FINANSOWEGO</td>
<td id="wzj6a46dne" pos="13:2" multiplier="" timePeriodEx="" inne=":"/>
</tr>
<tr pos="4">
<td id="3lmobr88c2" pos="1:4" multiplier="" timePeriodEx="" inne=":"/>
<td id="am4kjn88c3" pos="2:4" multiplier="" timePeriodEx="" inne=":"><html> <head></head> <body><span face='Times New Roman'> <p></p> </span></body></html></td>
<td id="1aij3588c4" pos="3:4" multiplier="" timePeriodEx="" inne=":"><span face='Times New Roman'></span></td>
<td id="6enzqb88c7" pos="4:4" multiplier="" timePeriodEx="" inne=":" columnSpan="4">Raport biezacy nr</td>
<td id="umdc9y88o3" pos="8:4" multiplier="" timePeriodEx="" inne=":">66</td>
<td id="11uzg088c9" pos="9:4" multiplier="" timePeriodEx="" inne=":">/</td>
<td id="ntkz6p88ca" pos="10:4" multiplier="" timePeriodEx="" inne=":">2012</td>
<td id="80nzo689x3" pos="11:4" multiplier="" timePeriodEx="" inne=":"/>
<td id="purzp388cb" pos="12:4" multiplier="" timePeriodEx="" inne=":"><html> <head> </head> <body> </body></html>
</tr>
</table>
我不知道如何为此编写XSl。
答案 0 :(得分:4)
这是Identity Transform的工作,这是XSLT中最常见的设计模式之一。首先,使用此模板,它只复制节点(包括属性)
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
您可以简单地扩展它以添加模板,以转换元素以根据需要使用新名称。例如,要将 shahid 元素转换为表格元素,请执行以下操作:
<xsl:template match="shahid" >
<table>
<xsl:apply-templates select="@*|node()"/>
</table>
</xsl:template>
除了创建新元素外,它还会添加所有现有属性,然后继续处理其子元素。
为您的其他更改执行此操作是一个简单的案例。这是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="shahid" >
<table>
<xsl:apply-templates select="@*|node()"/>
</table>
</xsl:template>
<xsl:template match="ali" >
<tr>
<xsl:apply-templates select="@*|node()"/>
</tr>
</xsl:template>
<xsl:template match="khan" >
<td>
<xsl:apply-templates select="@*|node()"/>
</td>
</xsl:template>
<xsl:template match="font" >
<span>
<xsl:apply-templates select="@*|node()"/>
</span>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于XML时,输出以下内容
<table id="hyxq68qa41" nazwa="RAPORT BIEZACY" opis="RAPORT BIEZACY">
<tr pos="2">
<td id="tlpyad6dn2" pos="1:2" multiplier="" timePeriodEx="" inne=":"/>
<td id="bu13zh6dnc" pos="2:2" multiplier="" timePeriodEx="" inne=":" columnSpan="11">KOMISJA NADZORU FINANSOWEGO</td>
<td id="wzj6a46dne" pos="13:2" multiplier="" timePeriodEx="" inne=":"/>
</tr>
<tr pos="4">
<td id="3lmobr88c2" pos="1:4" multiplier="" timePeriodEx="" inne=":"/>
<td id="am4kjn88c3" pos="2:4" multiplier="" timePeriodEx="" inne=":">
<html>
<head/>
<body>
<span face="Times New Roman">
<p/>
</span>
</body>
</html>
</td>
<td id="1aij3588c4" pos="3:4" multiplier="" timePeriodEx="" inne=":">
<span face="Times New Roman"/>
</td>
<td id="6enzqb88c7" pos="4:4" multiplier="" timePeriodEx="" inne=":" columnSpan="4">Raport biezacy nr</td>
<td id="umdc9y88o3" pos="8:4" multiplier="" timePeriodEx="" inne=":">66</td>
<td id="11uzg088c9" pos="9:4" multiplier="" timePeriodEx="" inne=":">/</td>
<td id="ntkz6p88ca" pos="10:4" multiplier="" timePeriodEx="" inne=":">2012</td>
<td id="80nzo689x3" pos="11:4" multiplier="" timePeriodEx="" inne=":"/>
<td id="purzp388cb" pos="12:4" multiplier="" timePeriodEx="" inne=":">
<html>
<head/>
<body/>
</html>
</td>
</tr>
</table>
答案 1 :(得分:0)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/shahid">
<table>
<xsl:copy-of select="@*"/>
<xsl:for-each select="ali">
<tr>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="khan"/>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="khan">
<td>
<xsl:apply-templates select="@*|node()"/>
</td>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="font">
<span>
<xsl:copy-of select="@*"/>
</span>
</xsl:template>
</xsl:stylesheet>