كيفية الحصول على عنصر TOP N المطابق للشرط باستخدام XPath
سؤال
لدي XML مثل هذا
<root>
<el id="1" value="3"/>
<el id="2" value="3"/>
<el id="3" value="4"/>
<el id="4" value="4"/>
<el id="5" value="4"/>
<el id="6" value="4"/>
</root>
أرغب باستخدام xpath واحد (أنا في سياق c# وليس قالب xslt) في الحصول على العنصرين الأولين بقيمة 4 أي
<el id="3" value="4"/>
<el id="4" value="4"/>
مع /root/el[position() <= 2 and @value=4]
سأحصل على 0 عنصر لأن الموضع () يعتمد على العقدة الأصلية، وليس المجموعة الفرعية الحالية.
يمكنني القيام بذلك في c# ولكن يبدو أنه من غير المجدي تحميل 1200 عقدة عندما أحتاج إلى 20 عقدة فقط.
شكرًا
المحلول
ما يلي يعمل بالنسبة لي في برنامج نصي XSLT؛
<xsl:template match="/">
<xsl:apply-templates select="/root/el[@value=4][position()<=2]" />
</xsl:template>
والنتيجة هي المعرف 3 و 4، وبالتالي فإن XPATH /root/el[@value=4][position()<=2]
يجب أن تعمل من أجلك.
نصائح أخرى
إجابة @rsp صحيحة، لكني أرغب في إضافة توضيح.ليس صحيحا دائما ذلك [cond1 and cond2]
يعادل [cond1][cond2]
.أنت بحاجة إلى النموذج الثاني.
تعبيرك:
/root/el[position() <= 2 and @value=4]
...تحديد الكل el
العناصر التي لها value
صفة تساوي 4
والذي يكون موقفه أقل من أو يساوي 2
.لا توجد مثل هذه العناصر في المستند الخاص بك.
انت تريد:
/root/el[@value=4][position() <= 2]
...الذي يختار الكل أولاً el
العناصر التي لها value
صفة تساوي 4
وثم مرشحات القائمة حسب المنصب، حسب الرغبة.