从节点集中获取唯一的节点列表
Getting a unique list of nodes from a node-set
我在尝试从两个组合列表中提取唯一的工作列表时遇到问题。这两个列表在同一个文档中,但结构不同。
我的计划是构建一个结合这两个列表的节点集。然后我将有一个列表,其中所有元素都具有相同的结构。然后我可以 select 唯一成员到第二个节点集。
我使用 Muenchian 方法提取唯一成员,如 here 所述。
为什么这不起作用有什么建议吗?
<!--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>
我找到了可行的解决方案。我认为问题在于 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>
我在尝试从两个组合列表中提取唯一的工作列表时遇到问题。这两个列表在同一个文档中,但结构不同。
我的计划是构建一个结合这两个列表的节点集。然后我将有一个列表,其中所有元素都具有相同的结构。然后我可以 select 唯一成员到第二个节点集。
我使用 Muenchian 方法提取唯一成员,如 here 所述。
为什么这不起作用有什么建议吗?
<!--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>
我找到了可行的解决方案。我认为问题在于 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>