检查XML是否有多个IDREF,如果是,则在XSLT中添加逗号

时间:2017-10-11 01:12:58

标签: xml xslt

我想问一下如果我的XML输入在给定点包含两个或更多IDREF,如何使XSLT样式表为输出添加逗号。例如,如果XML具有:

<person unique_no="p2" gender = "M">
    <chef-ref IDREF="c2"/>
    <chef-ref IDREF="c1"/>
</person>
<doctor id="c1">
    <d_f_name>Chef Linguini</d_f_name>
    <d_l_name>Gusteau</d_l_name>
    <specification>&on;</specification>
</doctor>

<doctor id="c2">
    <d_f_name>Gordon</d_f_name>
    <d_l_name>Ramsay</d_l_name>
    <specification>&ENT;</specification>
</doctor>

如您所见,在上面的XML文档中,我在chef-ref元素的person个子元素上有两个IDREF。

在这种情况下,如何让XSLT样式表在输出中包含逗号?

XSLT需要是这样的吗?

<xsl:for-each select="person">
  <td>
    <!-- <xsl:value-of select="key('Medications', @Medications/@IDREF)"/>
    -->
    <xsl:value-of select="@doctor"/>
    <xsl:if test="position() != last()">
      <xsl:text>, </xsl:text>
    </xsl:if>
  </td>
</xsl:for-each>

1 个答案:

答案 0 :(得分:0)

请始终说出您使用的是哪个XSLT版本。 XSLT 1.0现在已成为古代历史,但仍然有相当多的人使用它。

在XSLT 2.0中,这很简单,你只需要

test="position()!=1"

在XSLT 1.0中,您必须大致完成您在示例中所做的操作。但是,最好在除第一个({{1}})之外的每个项目之前插入分隔符,而不是在除最后一个项目之外的每个项目之后插入分隔符。这是因为知道你是否在列表末尾涉及预见,这可能很昂贵。