私はXSLTを初めて使用し、今朝のほとんどの時間、このポイントに到達するために遊んでいますが、どのように進めるかがわかりません。
これは、私がやろうとしていることを表すためのテストXMLです。
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="style.xslt"?>
<ResultCollection>
<ColumnSet>
<Column>
<Caption>Site</Caption>
<DisplayType>String</DisplayType>
</Column>
<Column>
<Caption>Date</Caption>
<DisplayType>String</DisplayType>
</Column>
<Column>
<Caption>Attendee</Caption>
<DisplayType>String</DisplayType>
</Column>
<Column>
<Caption>Paid</Caption>
<DisplayType>Hidden</DisplayType>
</Column>
</ColumnSet>
<RowSet>
<Row>
<Site>London</Site>
<Date>15/06/2012</Date>
<Attendee>James</Attendee>
<Paid>Yes</Paid>
</Row>
<Row>
<Site>London</Site>
<Date>15/06/2012</Date>
<Attendee>John</Attendee>
<Paid>Yes</Paid>
</Row>
</RowSet>
</ResultCollection>
そして、これは私がそれを変換するために使用している関連するXSLTです:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<style type="text/css">
table.resultsCollection
{
border-collapse:collapse;
text-align:center;
margin:5px;
padding:2px;
}
table.resultsCollection tr th,
table.resultsCollection tr td
{
padding:2px 8px 2px 8px;
}
</style>
</head>
<body>
<table border="1" class="resultsCollection">
<tr bgcolor="#eeeeff">
<xsl:for-each select="ResultCollection/ColumnSet/Column">
<xsl:if test="not(self::*/DisplayType[text()]='Hidden')">
<th><xsl:value-of select="Caption"/></th>
</xsl:if>
</xsl:for-each>
</tr>
<xsl:for-each select="ResultCollection/RowSet/Row">
<tr>
<td><xsl:value-of select="Site"/></td>
<td><xsl:value-of select="Date"/></td>
<td><xsl:value-of select="Attendee"/></td>
<td><xsl:value-of select="Paid"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
使用しているXML構造を変更することはできません。変更すると、自分の生活が楽になると思うので、自分で制御することはできません。それでも、私の目標は、読みやすく、つまりXSLTに見えるようにすることです。
問題は、「Column」ノードに、その列を表示するかどうかを決定する「DisplayType」が含まれていることです。'xsl:if'を使用して、そのタイプの列が表示されないようにしました。ただし、これを実行する方法を理解できず、関連するレコードも出力されないようにすることはできません。これら2つを一緒に実行すると、テーブルの4番目の列にヘッダーがないことがわかります。ただし、「有料」ノードのある2つの行の内容は、関係なく出力されます。
2つを同期する方法はありますか?(これが私の最初の刺し傷なので、私が持っているものを証明するための提案も歓迎します)
クリス