這兩者的XPath 2.0表達式和一個XQuery,其選擇想要的元件(一個或多個):
/*/basket[egg[max(/*/basket/count(egg))]]
XSLT 2.0 - 基於驗證:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:sequence select="/*/basket[egg[max(/*/basket/count(egg))]]"/>
</xsl:template>
</xsl:stylesheet>
當這種轉化應用於以下XML文檔(您提供的XML片段,封裝到單個頂層元素中以成爲格式良好的XML文檔):
<t>
<basket name="1">
<egg></egg>
<egg></egg>
</basket>
<basket name="2">
<egg></egg>
</basket>
<basket name="3">
<egg></egg>
<egg></egg>
<egg></egg>
<egg></egg>
</basket>
</t>
XPath表達式進行評估,評估的結果複製到輸出:
<basket name="3">
<egg/>
<egg/>
<egg/>
<egg/>
</basket>
請注意:
有作爲「在沒有這樣的事節點與另一個節點的最多發生「。
實際上,根據實際的XML文檔,可能有很多元素包含相同的最大數量的其他元素。
如果你想只獲得一個這樣的元素,說,在文檔中的第,然後使用:
/*/basket[egg[max(/*/basket/count(egg))]][1]
使用XQuery偉大的工作,+1 –
感謝這個! 我發佈的示例代碼比我需要解決的問題要複雜得多。這個解決方案是我最容易適應的解決方案。還感謝@dimitri和Roman – Jack