我想獲取最短文本的節點的項目和類型列表。使用xslt/xpath。從節點列表中獲取最短文本列表
我有以下示例XML:
<a>
<b>
<item>short</item>
<item>longest</item>
<item type="x">longest text</item>
<item type="x">short text</item>
<item type="y">text</item>
</b>
</a>
這是我迄今爲止
<xsl:template match="ns:item">
<xsl:variable name="type">
<xsl:choose>
<xsl:when test="@type">
<xsl:value-of select="@type" />
</xsl:when>
<xsl:otherwise>default</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="position() = 1">{</xsl:if>
"<xsl:value-of select='$type' />" : "<xsl:value-of select='.' />"
<xsl:if test="position() != last()">,</xsl:if>
<xsl:if test="position() = last()">}</xsl:if>
</xsl:template>
如何過濾所有,但最短的文字出來的結果嗎?
輸出應該是這個樣子:
{ "default": "short",
"x" : "short text",
"y" : "text" }
由於我使用XSLT/XPath的只是偶爾,只有非常簡單的事情,我希望有人能幫助我。
它甚至取決於您正在使用的XSLT處理器。例如,Xalan和Saxon都會爲position()函數返回不正確的值。解決方案可以使用然後剝離第一個節點。 –
2011-05-13 11:39:03
好問題,+1。查看我的答案,獲取完整而簡短的XSLT 2.0解決方案。 – 2011-05-13 13:05:09