我一直在尝试使用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 expression和XSLT transfom with inline if statements来尝试理解,但我仍然没有得到它。任何帮助表示赞赏。我需要XSLT中的解决方案。
答案 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>