私はこれを行うことができるかどうか疑問に思っている XSLT を開始しています:
この例http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalogを使用して、少し変更しています。
以下を XSLT エリアに貼り付けます。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:choose>
<xsl:when test="country = 'USA'">
<tr>
<td>Title:</td> <td><xsl:value-of select="title"/></td>
<td>Artist</td> <td><xsl:value-of select="artist"/></td>
<td>Year:</td> <td><xsl:value-of select="year"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td>Price:</td> <td><xsl:value-of select="price"/></td>
<td>Company:</td> <td><xsl:value-of select="company"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
ここにあるのは一般的な XML ソースですが、XML 要素の 1 つのノード (この場合は国) に応じて、データを異なる方法で表示したいと考えています。
ここまでは順調ですね。
次に、XML 構造を使用して、国に応じて表示されるラベルとノードのペアをそれぞれ指定します。次に、for-each ループを使用してすべてのペアを反復処理し、それらを表示します。
これの合理的な理由は、フォーマットが単純な LabelValue よりも少し複雑になる可能性があり、後でそれらすべてを手動で変更する必要がないからです。
これは私が試したものです。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="Details">
<Details>
<USA>
<Pair><Node>title</Node><Label>Title:</Label></Pair>
<Pair><Node>artist</Node><Label>Artist:</Label></Pair>
<Pair><Node>year</Node><Label>Year:</Label></Pair>
</USA>
<Others>
<Pair><Node>price</Node><Label>Price:</Label></Pair>
<Pair><Node>company</Node><Label>Company:</Label></Pair>
</Others>
</Details>
</xsl:variable>
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:choose>
<xsl:when test="country = 'USA'">
<xsl:for-each select = "$Details/Details/USA/Pair">
<xsl:variable name="Node">
<xsl:value-of select ="Node"/>
</xsl:variable>
<tr><td><xsl:value-of select = "Label"/></td><td> <xsl:value-of select ="Node"/></td></tr>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select = "$Details/Details/Others/Pair">
<xsl:variable name="Node">
<xsl:value-of select ="Node"/>
</xsl:variable>
<tr><td><xsl:value-of select = "Label"/></td><td> <xsl:value-of select ="Node"/></td></tr>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
しかし、これはうまくいきません。
誰かが私がこれを行う方法について正しい方向に向けることができますか?