使用XSL将XML项转换为超链接

时间:2013-04-30 07:57:07

标签: html xml xslt

以下是处理的XML

 <?xml version="1.0" encoding="UTF-8"?>
<javancss>
    <sourceFile name="D:\EM_Projects\javancssParser\src\old_code_complexity.xml"/>
    <compareFile name="D:\EM_Projects\javancssParser\src\new_code_complexity.xml"/>
    <summaryFile name="D:\EM_Projects\javancssParser\src\Summary.xml"/>
    <packages />
    <functions />
    <objects />
</javancss>

这是XSLT的一小部分与它一起发布

<center><table border="1" cellspacing="5">
<tr>
<th>File</th>
<th>Path</th>
<th>Link </th>
</tr>

<tr>
<td>sourceFile</td>
<td> <a> <xsl:value-of select="/javancss/sourceFile/@name" /> </a></td>
<td>  </td>
</tr>

<tr>
<td>compareFile </td>
<td><xsl:value-of select="/javancss/compareFile/@name" /> </td>
<td> </td>
</tr>

<tr>
<td>compareFile </td>
<td><xsl:value-of select="/javancss/compareFile/@name" /> </td>
<td> </td>
</tr>

</table>
</center>

我想要做的是采取路径(在每一行中由第二列表示)并在第3列(在相应的<td> </td>中)放置一个超链接,现在为空白。这是怎么回事?

所有输入都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

以下XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>

    <xsl:template match="/">
        <center>
            <table border="1" cellspacing="5">
                <tr>
                    <th>File</th>
                    <th>Path</th>
                    <th>Link </th>
                </tr>

                <xsl:apply-templates/>
            </table>
        </center>       

    </xsl:template>

    <xsl:template match="javancss">
        <xsl:apply-templates mode="link-row" select="sourceFile"/>
        <xsl:apply-templates mode="link-row" select="compareFile"/>
        <xsl:apply-templates mode="link-row" select="summaryFile"/>
    </xsl:template>

    <xsl:template match="*" mode="link-row">
        <tr>
            <td><xsl:value-of select="name()"/></td>
            <td><xsl:value-of select="@name" /></td>
            <td>
                <a href="{@name}">link</a>
            </td>
        </tr>       
    </xsl:template>

</xsl:transform>

应用于给定的输入文档

<?xml version="1.0" encoding="UTF-8"?>
<javancss>
    <sourceFile name="D:\EM_Projects\javancssParser\src\old_code_complexity.xml"/>
    <compareFile name="D:\EM_Projects\javancssParser\src\new_code_complexity.xml"/>
    <summaryFile name="D:\EM_Projects\javancssParser\src\Summary.xml"/>
    <packages />
    <functions />
    <objects />
</javancss>

产生以下输出

<center>
    <table border="1" cellspacing="5">
        <tr>
            <th>File</th>
            <th>Path</th>
            <th>Link </th>
        </tr>
        <tr>
            <td>sourceFile</td>
            <td>D:\EM_Projects\javancssParser\src\old_code_complexity.xml</td>
            <td>
                <a href="D:\EM_Projects\javancssParser\src\old_code_complexity.xml">link</a>
            </td>
        </tr>
        <tr>
            <td>compareFile</td>
            <td>D:\EM_Projects\javancssParser\src\new_code_complexity.xml</td>
            <td>
                <a href="D:\EM_Projects\javancssParser\src\new_code_complexity.xml">link</a>
            </td>
        </tr>
        <tr>
            <td>summaryFile</td>
            <td>D:\EM_Projects\javancssParser\src\Summary.xml</td>
            <td>
                <a href="D:\EM_Projects\javancssParser\src\Summary.xml">link</a>
            </td>
        </tr>
    </table>
</center>

请注意:

  • 您可能不希望表标题位于用于数据行的同一模板中
  • 将上下文设置为感兴趣的节点会使您的XPath表达式更短且更易读
  • 你可能意味着最后一项的摘要文件