كيفية الحصول على عنصر TOP N المطابق للشرط باستخدام XPath

StackOverflow https://stackoverflow.com/questions/5899372

  •  29-10-2019
  •  | 
  •  

سؤال

لدي 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()&lt;=2]" />
  </xsl:template>

والنتيجة هي المعرف 3 و 4، وبالتالي فإن XPATH /root/el[@value=4][position()&lt;=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 وثم مرشحات القائمة حسب المنصب، حسب الرغبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top