0

処理中の 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>

私がやりたいことは、パス (各行の 2 列目で表される) を取得し、3 列目にハイパーリンクを配置することです (それぞれ<td> </td>、今のところ空白です)。同じことをする方法は何ですか?

すべての入力を高く評価します。

4

1 に答える 1

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 式が短くなり、読みやすくなります。
  • おそらく、最後の項目の summaryFile を意味していました
于 2013-04-30T08:18:16.853 に答える