Xml XSL。如何仅显示一次节点

Xml XSL。如何仅显示一次节点,xml,xslt,Xml,Xslt,这是由下面的XSL+XML+CSS代码构建的HTML输出的结果,到目前为止,我一直在努力实现: GoPro 3 Black | | GoPro 3 Silver | ----------------------------------------------------------------------------- | Video resolution | 4K | Video resolution | 4K

这是由下面的XSL+XML+CSS代码构建的HTML输出的结果,到目前为止,我一直在努力实现:

   GoPro 3 Black   |                  | GoPro 3 Silver   |
-----------------------------------------------------------------------------
| Video resolution | 4K               | Video resolution | 4K               |
|                  | 30, 25, 24       |                  | 15, 12.5         |
|                  | Ultra wide       |                  | Ultra wide       |
|                  | ...              |                  | ...              |
|                  |                  |                  |                  |
| Video format     | H.264            | Video format     | H.264            |
|                  | ...              |                  | ...              |
|                  |                  |                  |                  |
第一列和第三列来自以下XML标记这是您可以在下面找到的完整XML代码的一部分:

<section>
    <name>Video resolution</name>
    <row>
        <value></value>
    </row>
</section>
<section>
    <name>Video format</name>
    <row>
        <value></value>
    </row>
</section>

如果我完全理解您试图实现的目标,那么一个非常简单的修复方法就是限制仅显示第一项的节名称

原始代码中的此部分显示名称:

<div class="column caption">
     <strong><xsl:value-of select="name"/></strong>
</div>
添加一个if元素:

<xsl:if test="not(parent::item/preceding-sibling::item)">
        <div class="column caption">
            <strong><xsl:value-of select="name"/></strong>
        </div>
</xsl:if>
和section/name将不再显示,而是显示输出中的第一个项目,即第一列。 还有其他的解决方案,你可以重新设计你的匹配流,但这一个很快,并没有那么脏


注意:只有在每个项目的章节名称和顺序相同的情况下,这才有效。

您能保证每个项目都有相同的章节,名称和顺序都相同,或者某些项目可能缺少某些章节吗?是的,每个“项目”都有相同的“章节”。“名称”将紧跟在“节”之后。唯一肯定会更改的标记是“行”和内部“值”的数量。
body {
    padding: 0px;
    margin: 0px;
}

.item {
    float: left;
}

.column {
   float: left;
   padding-bottom: 1000px;
   margin-bottom: -1000px;
}

.caption {
    width: 160px;
}

.values {
    width: 200px;
}

.container {
    overflow: hidden;
}

.clearfix:after {
    content: "";
    display: table;
    clear: both;
}
<div class="column caption">
     <strong><xsl:value-of select="name"/></strong>
</div>
<xsl:if test="not(parent::item/preceding-sibling::item)">
        <div class="column caption">
            <strong><xsl:value-of select="name"/></strong>
        </div>
</xsl:if>