0
我爲所有的代碼表示歉意,但是我無法消除這些問題而不會混淆問題的明確性。建立一個表格,其中的父母只有具有特定屬性值的兄弟姐妹的值
假設我有這樣的XML:
<Dataset>
<Rec RN="FOO">
<Fld FN="ID">ID_1</Fld>
<Fld FN="OPT">0</Fld>
<Fld FN="DESCRIPTION">DESCRIPTION_1</Fld>
</Rec>
<Rec RN="BAR" RC="3">
<Fld FN="ID">ID_2</Fld>
<Fld FN="TYPE">TYPE_1</Fld>
</Rec>
<Rec RN="BAR">
<Fld FN="ID">ID_3</Fld>
<Fld FN="TYPE">TYPE_2</Fld>
</Rec>
<Rec RN="FOO">
<Fld FN="ID">ID_4</Fld>
<Fld FN="OPT">1</Fld>
<Fld FN="DESCRIPTION">DESCRIPTION_2</Fld>
</Rec>
<Rec RN="BAR" RC="3">
<Fld FN="ID">ID_5</Fld>
<Fld FN="TYPE">TYPE_4</Fld>
</Rec>
<Rec RN="BAR">
<Fld FN="ID">ID_6</Fld>
<Fld FN="TYPE">TYPE_5</Fld>
</Rec>
<Rec RN="SPAM">
<Fld FN="CLASS">CLASS_1</Fld>
</Rec>
</Dataset>
而下面的XSLT:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Dataset">
<html>
<head>
<link rel="stylesheet" type="text/css" href="On-line Styles.css"/>
</head>
<body>
<p class="subheading">
Commands
</p>
<p>
<xsl:choose>
<xsl:when test="Rec[@RN='FOO']">
<xsl:apply-templates select="Rec[@RN='FOO']"/>
</xsl:when>
<xsl:otherwise>
None
</xsl:otherwise>
</xsl:choose>
</p>
</body>
</html>
</xsl:template>
<xsl:template match="Rec[@RN='FOO']">
<xsl:for-each select=".">
<xsl:value-of select="Fld[@FN='ID']"/>
<xsl:if test="Fld[@FN='OPT'] = 1">
(Optional)
</xsl:if>
-
<xsl:value-of select="Fld[@FN='DESCRIPTION']"/>
<p>
<xsl:choose>
<xsl:when test="../Rec[@RN='FOO']">
<table style="border-collapse: separate;" cellspacing="4" border="2"
bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<xsl:for-each select="../Rec[@RN='BAR']">
<xsl:if test="preceding-sibling::Rec/@RN='FOO'">
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">
<xsl:choose>
<xsl:when test="Fld[@FN='ID']">
<xsl:value-of select="Fld[@FN='ID']"/>
</xsl:when>
<xsl:otherwise>
<td> </td>
</xsl:otherwise>
</xsl:choose>
</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">
<xsl:choose>
<xsl:when test="Fld[@FN='TYPE']">
<xsl:value-of select="Fld[@FN='TYPE']"/>
</xsl:when>
<xsl:otherwise>
<td> </td>
</xsl:otherwise>
</xsl:choose>
</p>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:when>
</xsl:choose>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我碰到下面的輸出表:
表1
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
表2
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
我需要的是爲每個表僅僅用於<Rec RN="BAR">
小號以下的<Rec RN="FOO">
顯示ID和TYPE文本值和之前的下一個<Rec RN="FOO">
或<Rec>
與另一@RN值。在<Rec RN="FOO">
之後可以有1至n個<Rec RN="BAR">
。下面的示例示出了輸出我需要:
表1
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_2</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_1</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_3</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_2</p>
</td>
</tr>
</table>
表2
<table style="border-collapse: separate;" cellspacing="4" border="2" bordercolorlight="#c0c0c0" bordercolordark="#c0c0c0">
<tr bgcolor="#C0C0C0">
<td style="width: 35%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">ID</span>
</p>
</td>
<td style="width: 45%; padding: 6px;" valign="top">
<p class="Tableheader" style="margin-bottom: 0;">
<span style="font-weight: bold;">TYPE</span>
</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_5</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_4</p>
</td>
</tr>
<tr>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">ID_6</p>
</td>
<td style="padding: 6px;" valign="top">
<p style="margin-bottom: 0;">TYPE_5</p>
</td>
</tr>
</table>
這是非常難以閱讀。假設你想爲每個'提供一個表格,對於每個「後面的一行,它會是正確的嗎? –
是的。我認爲你的答案將起作用。我會試一試,並接受它作爲答案,如果它的工作。謝謝! –