سؤال

أحاول أن أعزز العقدة السابقة في A-ECH باستخدام المحور السابق للبلاغ ، ومرشح ومؤشر للعثور عليه.

المشكلة هي أنني أريد فقط العنصر الأول الذي يطابق XPath في المحدد ، ومع ذلك ، يبدو أنني غير قادر على تطبيق كل من المرشح والمؤشر. يبدو أن المفهرس يتغلب على المرشح ، لذا أحصل دائمًا على أول الأخوة السابقة بدلاً من أول واحد يطابق المرشح.

لقد حاولت وضع هذا في متغير داخل foreach ، ولكن نظرًا لأنه لا يمكن تغيير المتغير ، فإن مجموعة العقد هي دائمًا هي قيم الأخوة السابقة للبند الثاني.

إليك الكود ذي الصلة (قطع أكبر قدر ممكن من الضوضاء). يعتذر عن ضوضاء Umbraco (XSLT هو لتوليد بعض العلامات المعقدة إلى حد ما للبطانة الفرعية التي لا يمكنني تغييرها بسهولة).

<xsl:for-each select="$currentPage/ancestor-or-self::node[(@nodeTypeAlias='Discover' or @nodeTypeAlias='CampaignHome') and data[@alias='umbracoNaviHide'] != 1]/child::node[(@nodeTypeAlias='Discover' or @nodeTypeAlias='CampaignHome') and data[@alias='umbracoNaviHide'] != 1]">  

   <!--This variable is always set to the second item's preceding sibling-->
   <xsl:variable name="precedingItem" select="preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]]" />

   <!--This variable always contains the second item even if /data/@alias='umbracoNaviHide' = 1 -->
   <xsl:variable name="predingItemWithIndexer" select="preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]][1]" /> 

     <!--  this always prints out the id of the first item -->
     <xsl:value-of select="position()" /> <xsl:value-of select="$precedingItem[1]/@id" />
</xsl:foreach>

أود استخدام المحدد الثاني المضمّن ولكن نظرًا لأن مرشح الفهرس يتجاوز المرشح الآخر ، فإنه لا يعطي القيم الصحيحة عندما يكون umbraconavihide = 1.

هل كانت مفيدة؟

المحلول

preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]]

هذا يعنى: حدد كل الأخوة السابقة node عناصر لديها طفل واحد على الأقل data عنصر بدون alias السمة أو مع alias السمة لا تساوي "umbraconavihide"

تعديل: هذا هو XPath الصحيح لهذا:

كنت أرغب في أول عنصر عقدة سابق يحتوي على عنصر بيانات يحتوي على اسم مستعار سمة يسمى Umbraconavihide والذي لا يحتوي على القيمة 1.

preceding-sibling::node[data[@alias='umbracoNaviHide']!=1][1]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top