XPath排序内联if语句

时间:2012-05-30 17:44:17

标签: xslt xpath xquery

我一直在尝试使用XPath和XQuery来解决这个问题,在之前的一些帖子的帮助下无济于事。现在我有一个空子节点,它应该在排序结束时默认排序,但不幸的是,这些空节点上根本不会发生排序。结果我一直试图找到一种方法在排序部分将它们设置为零。以下是一个示例:

<xsl:for-each select="MyItems/Item">
<xsl:sort select="Order/obj/Number" order="ascending"> 

我想做一些类似于内联if语句的内容,作为下面C#中类似的一部分:

foreach(item in MyItems.OrderBy(Order/obj/Exists != false ? Order/obj/Number : 0)

我正在使用这些链接:dynamic xpath expressionXSLT transfom with inline if statements来尝试理解,但我仍然没有得到它。任何帮助表示赞赏。我需要XSLT中的解决方案。

2 个答案:

答案 0 :(得分:2)

您的情况不明确,因为您对XML的内容或XSLT转换的性质一无所知。但听起来好像你有Item个元素,没有Order/obj/Number元素可以排序?

我会编写类似这样的内容

<xsl:template match="/root">

  <xsl:copy>

    <xsl:apply-templates select="MyItems/Item[Order/obj/Number]">
      <xsl:sort select="Order/obj/Number" />
    </xsl:apply-templatesh>

    <xsl:apply-templates select="MyItems/Item[not(Order/obj/Number)]" />

  </xsl:copy>

</xsl:template>

<xsl:template select="MyItems/Item">
  <xsl:copy-of select="current()" />
</xsl:template>

答案 1 :(得分:0)

谈论“空节点”没有帮助。这不是一个定义明确的术语。向我们展示您的XML,您期望的结果和实际结果,我们可以为您提供帮助。

如果xsl:sort中的select表达式返回空序列/ node-set,则有效排序键是零长度字符串,因此这些项在任何其他项之前排序(假设按升序排序)。< / p>