1

在以前的一些帖子的帮助下,我一直在尝试使用 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)

我正在使用这些链接:动态 xpath 表达式带有内联 if 语句的 XSLT转换来尝试理解,但我仍然没有得到它。任何帮助表示赞赏。我需要 XSLT 中的解决方案。

4

2 回答 2

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>
于 2012-05-30T19:03:16.327 回答
0

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

应该发生的是,如果 xsl:sort 中的选择表达式返回一个空序列/节点集,则有效的排序键是一个长度为零的字符串,因此这些项目在任何其他项目之前排序(假设升序)。

于 2012-05-31T09:15:48.520 回答