需要 select 多个元素中的唯一一个值

Need to select the only one value from multiple element

我需要在某些条件下从多个元素中获取唯一的一个值

输入XML:

   <PlanMaps>
      <_PlanMaps>
        <PolicyNum>456789</PolicyNum>
      </_PlanMaps>
      <_PlanMaps>
        <PolicyNum>456789</PolicyNum>
      </_PlanMaps>
      <_PlanMaps>
        <PolicyNum>0456789</PolicyNum>
      </_PlanMaps>
    </PlanMaps>

XSLT 我试过:

          <IndexField>
                 <idxName>Number</idxName>
                 <idxValue>
                    <xsl:choose>
                       <xsl:when test="PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))]">
                          <xsl:value-of select="PlanMaps/_PlanMaps/PolicyNum"/>
                       </xsl:when>
                       <xsl:otherwise>
                          <xsl:value-of select="''"/>
                       </xsl:otherwise>
                    </xsl:choose>
                 </idxValue>
              </IndexField>

我得到的输出

<idxValue>456789 456789 0456789</idxValue>

预期输出:

<idxValue>456789</idxValue>

这里我必须检查两个条件,一个是如果有多个 <PolicyNum> 具有相同的值,第一个值应该选择,另一个是如果只有一个 <PolicyNum> 和它的值以 0 开头,它应该是空的。

xsl:value-of 应该使用与 xsl:when.

相同的 xpath

获取节点集中第一个元素的 XPath

(//PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))])[1]/text()

根据 LMC 的回答,我认为您的代码可以简单地简化为:

<IndexField>
  <idxName>Number</idxName>
  <idxValue>
  <xsl:value-of select="(PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))])[1]"/>
  </idxValue>
</IndexField>

如果只有一个以零开头的值,则不输出任何内容,如果有多个值,则输出第一个不以零开头的值。