XML文件:
- <?xml version="1.0" encoding="utf-8"?>
- <doc>
- <html>
- <table a="b"></table>
- <table style="a:b;" a="b"></table>
- <table style="WIDTH:100px;" a="b"></table>
- <table style="WIDTH:100PX;">
- <th TEXT-ALIGN='10' a="a">
- <td BACKGROUND-COLOR="red" TEXT-ALIGN='20' a='b'>1</td>
- </th>
- </table>
- <span style="TEXT-DECORATION:underline"><a>ABC</a></span>
- <span style="text-decoration:underline"><a>ABC</a></span>
- <span style="TEXT-DECORATION:underline" a="b"><a>ABC</a></span>
- <span style="color:#ff3300">dfafadssfas</span>
- <span style="COLOR:#0033ff">dfafadssfas </span>
- <span style="color:red"><a>EFG</a></span>
- <p style="COLOR:#ff3300">dfafadssfas </p>
- <p style="COLOR:#0033ff">dfafadssfas </p>
- <p style="align:center">dfafadssfas </p>
- <ul>
- <li>
- <p>1</p>
- <ul>
- <li>
- <p><span style="TEXT-DECORATION:underline"><a>ABC</a></span></p>
- <ul>
- <li>
- <p><span style="color:#ff3300"><span style="TEXT-DECORATION:underline"><a>ABC</a></span></span></p>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li>1231</li>
- </ul>
- <ul><ul></ul></ul>
- <strong a="1" b="2">a</strong>
- <h1>a</h1>
- <h2>q</h2>
- <h3>w</h3>
- <em>em</em>
- </html>
- </doc>
结果:
- <?xml version="1.0" encoding="utf-8"?>
- <jpxml>
- <table a="b" />
- <table a="b" />
- <table width="100px 			 								"
- a="b" />
- <table width="100px 			 								">
- <th align="10" a="a">
- <td bgcolor="red" align="20" a="b">1</td>
- </th>
- </table>
- <u>
- <a>ABC</a>
- </u>
- <u>
- <a>ABC</a>
- </u>
- <u a="b">
- <a>ABC</a>
- </u>
- <red>dfafadssfas</red>
- <blue>dfafadssfas </blue>
- <span>
- <a>EFG</a>
- </span>
- <red>dfafadssfas </red>
- <blue>dfafadssfas </blue>
- <p>dfafadssfas </p>
- <ul1>
- <li1>
- <p>1</p>
- <ul2>
- <li2>
- <p>
- <u>
- <a>ABC</a>
- </u>
- </p>
- <ul3>
- <li3>
- <p>
- <red>
- <u>
- <a>ABC</a>
- </u>
- </red>
- </p>
- </li3>
- </ul3>
- </li2>
- </ul2>
- </li1>
- <li1>1231</li1>
- </ul1>
- <ul1>
- <ul2 />
- </ul1>
- <b a="1" b="2">a</b>
- <h1>a</h1>
- <h2>q</h2>
- <h3>w</h3>
- <i>em</i>
- </jpxml>
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="xml" version="1.0" encoding="utf-8"
- indent="yes" cdata-section-elements="DataContent " />
- <xsl:template match="/">
- <jpxml>
- <xsl:apply-templates />
- </jpxml>
- </xsl:template>
- <!-- ul,ol的转换 -->
- <xsl:template match="ul|ol">
- <xsl:choose>
- <xsl:when test="number(count(ancestor::ul)) > 0">
- <xsl:element name="{concat('ul',number(count(ancestor-or-self::ul)))}">
- <xsl:for-each select="@*">
- <xsl:copy/>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="ul1">
- <xsl:for-each select="@*">
- <xsl:copy/>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <!-- li的转换 -->
- <xsl:template match="li">
- <xsl:choose>
- <xsl:when test="number(count(ancestor::li)) > 0">
- <xsl:element name="{concat('li',number(count(ancestor-or-self::li)))}">
- <xsl:for-each select="@*">
- <xsl:copy/>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="li1">
- <xsl:for-each select="@*">
- <xsl:copy/>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <!-- 表格处理:style含有WIDTH的变成width属性,删除style属性 -->
- <xsl:template match="table">
- <xsl:element name="{name(.)}">
- <xsl:choose>
- <!-- 判断当前table是否含有style属性值WIDTH -->
- <xsl:when test="contains(@style,'WIDTH')">
- <xsl:for-each select="@*">
- <!-- 判断当前属性是否是style -->
- <xsl:choose>
- <!-- 当前属性是style -->
- <xsl:when test="name(.) = 'style'">
- <xsl:attribute name="width">
- <!--判断width的属性值是否有px -->
- <xsl:choose>
- <xsl:when test="contains(substring-before(substring-after(string(.),'WIDTH:'),';'),'px')">
- <xsl:value-of select="number(substring-before(substring-after(string(.),'px;'))"/>px
- </xsl:when>
- <xsl:when test="contains(substring-before(substring-after(string(.),'PX')">
- <xsl:value-of select="number(substring-before(substring-after(string(.),'PX;'))"/>px
- </xsl:when>
- <!-- WITDTH值没有px -->
- <xsl:otherwise>
- <xsl:value-of select="number(substring-before(substring-after(string(.),';'))"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <!-- 当前属性不是style -->
- <xsl:attribute name="{name(.)}">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <xsl:for-each select="@*">
- <xsl:if test="name(.) != 'style'">
- <xsl:attribute name="{name(.)}">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:if>
- </xsl:for-each>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <!-- td处理:将TEXT-ALIGN属性改为align,BACKGROUND-COLOR改为bgcolor,属性值不变 -->
- <xsl:template match="td">
- <xsl:element name="{name(.)}">
- <xsl:for-each select="@*">
- <xsl:choose>
- <xsl:when test="name(.) = 'TEXT-ALIGN'">
- <xsl:attribute name="align">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:when>
- <xsl:when test="name(.) = 'BACKGROUND-COLOR'">
- <xsl:attribute name="bgcolor">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <!-- th处理:将TEXT-ALIGN属性改为align,属性值不变 -->
- <xsl:template match="th">
- <xsl:element name="{name(.)}">
- <xsl:for-each select="@*">
- <xsl:choose>
- <xsl:when test="name(.) = 'TEXT-ALIGN'">
- <xsl:attribute name="align">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <!-- <span style="TEXT-DECORATION:underline">ABC</span> -->
- <!-- <span style="COLOR:#ff3300">dfafadssfas </span> -->
- <!-- span标签下划线和两种颜色的转换和去除span标签中的属性和值 -->
- <xsl:template match="span">
- <xsl:choose>
- <xsl:when test="@style = 'TEXT-DECORATION:underline' or @style = 'text-decoration:underline'">
- <xsl:element name="u">
- <xsl:for-each select="@*">
- <xsl:if test="name(.) != 'style'">
- <xsl:attribute name="{name(.)}">
- <xsl:value-of select="."/>
- </xsl:attribute>
- </xsl:if>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@style = 'COLOR:#ff3300' or @style = 'color:#ff3300'">
- <xsl:element name="red">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@style = 'COLOR:#0033ff' or @style = 'color:#0033ff'">
- <xsl:element name="blue">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="{name(.)}">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <!-- <p style="COLOR:#ff3300">dfafadssfas </p> -->
- <!-- p标签两种颜色和删除属性和值的转换 -->
- <xsl:template match="p">
- <xsl:choose>
- <xsl:when test="@style = 'COLOR:#ff3300' or @style = 'color:#ff3300'">
- <xsl:element name="red">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@style = 'COLOR:#0033ff' or @style = 'color:#0033ff'">
- <xsl:element name="blue">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="{name(.)}">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="a">
- <xsl:element name="{name(.)}">
- <xsl:for-each select="@*">
- <xsl:copy />
- </xsl:for-each>
- <xsl:apply-templates />
- </xsl:element>
- </xsl:template>
- <xsl:template name="strong" match="strong">
- <xsl:element name="b">
- <xsl:for-each select="@*">
- <xsl:copy />
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="em">
- <xsl:element name="i">
- <xsl:for-each select="@*">
- <xsl:copy />
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- <xsl:template match="h1|h2|h3">
- <xsl:element name="{name(.)}">
- <xsl:for-each select="@*">
- <xsl:copy/>
- </xsl:for-each>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>
Java代码:
- public static void main(String argv[]){
- String src = "E:\\workspace2\\test1\\WebContent\\test2\\a.xml";
- String dest = "E:\\workspace2\\test1\\WebContent\\test2\\a1.xml";
- String xslt = "E:\\workspace2\\test1\\WebContent\\test2\\a.xsl";
- // String dest = "E:\\workspace2\\.Metadata\\.plugins\\org.eclipse.wst.server.core\\tmp1\\wtpwebapps\\test1\\WEB-INF\\results\\a2.xml";
- // String xslt = "E:\\workspace2\\.Metadata\\.plugins\\org.eclipse.wst.server.core\\tmp1\\wtpwebapps\\test1\\WEB-INF\\templates\\a.xsl";
- File src2 = new File(src);
- File dest2 = new File(dest);
- File xslt2 = new File (xslt);
- Source srcSource = new StreamSource(src2);
- Result destResult = new StreamResult(dest2);
- Source xsltSource = new StreamSource(xslt2);
- try{
- TransformerFactory transFact = TransformerFactory.newInstance();
- Transformer trans = transFact.newTransformer(xsltSource);
- trans.transform(srcSource,destResult);
- }catch(TransformerConfigurationException e){
- e.printStackTrace();
- }catch(TransformerFactoryConfigurationError e){
- e.printStackTrace();
- }catch(TransformerException e){
- e.printStackTrace();
- }
- }