【问题标题】:Getting a unique list of nodes from a node-set从节点集中获取唯一的节点列表
【发布时间】:2015-11-10 12:47:52
【问题描述】:

我在尝试从两个组合列表中提取唯一的作业列表时遇到问题。这两个列表在同一个文档中,但结构不同。

我的计划是构建一个结合两个列表的节点集。然后,我将有一个列表,其中所有元素都具有相同的结构。然后我可以为第二个节点集选择唯一成员。

我使用了 here 中描述的 Muenchian 方法来提取唯一成员。

任何建议为什么这不起作用?

  <!--create a key to use Muenchian grouping on jobs-->
  <xsl:key name="keyJobID" match="Job" use="JobID"/>

  <!--select unique job nodes from a node-set-->
  <xsl:template name="UniqueJobNodes">
    <xsl:param name="List"/>
    <xsl:for-each select="$List/Job[not(generate-id() = generate-id(key('keyJobID', JobID)[1]))]">
      <xsl:text>does-this-work?</xsl:text>
    </xsl:for-each>
  </xsl:template>

我传递给模板的节点集似乎是正确的。当我在没有条件的情况下使用 '$List/Job' 时,我会得到结果。

输入节点集如下所示:

  <Job Primary="1">
    <JobProficiency>100</JobProficiency>
    <JobID>300.Supervisor</JobID>
    <JobPayRate>15.4</JobPayRate>
  </Job>
  <Job>
    <JobProficiency>50</JobProficiency>
    <JobID>SUPERVISOR</JobID>
    <JobPayRate>15.4</JobPayRate>
  </Job>

【问题讨论】:

  • 考虑发布最少但完整的示例,以便我们轻松重现问题。我们需要看到模板的输入和调用。

标签: xslt xslt-1.0 muenchian-grouping


【解决方案1】:

我找到了一个可行的解决方案。我认为问题在于 key() 函数针对当前文档节点而不是变量中的节点集进行操作。因为我可以毫无问题地对列表进行排序,所以我使用它而不是 xsl 键

  <xsl:template name="UniqueJobNodes">
    <xsl:param name="List"/>
    <xsl:for-each select="$List/Job">
      <xsl:sort select="JobID/text()" />
      <xsl:if test="not(following-sibling::Job[JobID/text() = self::JobID/text()])" >
        <xsl:copy-of select="."/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多