如何将匹配的元素分组以同时处理两者?

时间:2019-05-28 16:14:55

标签: html xml xslt

我正在做一个学校项目,我们必须使用XML和XSLT来生成HTML。我的项目是一棵家谱。我选择了根人,但现在我希望组婚并立即处理他们,而不是每个人单独处理。

此刻,我选择每个根人,然后搜索已婚者并将其一起显示。但是,由于每一个都是独立处理的,所以我会两次获得所有结果。

我的数据如下:

<persons>
    <person id="1" marriedTo="2" father="0" mother="0">
        <name>Father</name>
    </person>
    <person id="2" marriedTo="1" father="0" mother="0">
        <name>Mother</name>
    </person>
    ....
</persons>

我的xslt代码:

<xsl:template match="/persons/person[@father='0' and @mother='0']">
    <div class="person">
         <xsl:value-of select="name"/>
    </div>
    <div class="person">
         <xsl:value-of select="key('couple',@marriedTo)/name"/>
    </div>
</xsl:template>

有没有办法获取两个元素并将它们一起处理?也许像

<div>
    <xsl:value-of select="person[0]/name"/>
</div>
<div>
    <xsl:value-of select="person[1]/name"/>
</div> 

1 个答案:

答案 0 :(得分:1)

如果您不介意先选择父亲还是母亲,请更改现有模板以仅匹配person大于marriedTo的{​​{1}}记录。并拥有另一个与相反的模板匹配的模板,然后忽略该人。

id

当然,如果一对夫妇中的一个人确实有父亲或母亲,则可能需要额外的模板,但这应该可以为您提供一般的想法。