XPath لإرجاع تسلسل سلسلة لقيم العقدة التابعة المؤهلة

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

  •  05-07-2019
  •  | 
  •  

سؤال

هل يمكن لأي شخص أن يقترح تنسيق تعبير XPath الذي يُرجع قيمة سلسلة تحتوي على قيم متسلسلة لبعض العقد الفرعية المؤهلة لعنصر ما، مع تجاهل الآخرين:

<div>
    This text node should be returned.
    <em>And the value of this element.</em>
    And this.
    <p>But this paragraph element should be ignored.</p>
</div>

يجب أن تكون القيمة التي تم إرجاعها عبارة عن سلسلة واحدة:

This text node should be returned. And the value of this element. And this.

هل هذا ممكن في تعبير XPath واحد؟

شكرًا.

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

المحلول

في XPath 1.0:

يمكنك استخدام

/div//text()[not(parent::p)]

لالتقاط العقد النصية المطلوبة.لا يمكن إجراء التسلسل نفسه في XPath 1.0، وأوصي بالقيام بذلك في التطبيق المضيف.

نصائح أخرى

في XPath 2.0 :

string-join(/*/node()[not(self::p)], '')

/div//text()

وقوات شرطة مائلة مزدوجة لاستخراج النص بغض النظر عن العقد وسيطة

وهذه النظرة التي تعمل:

وعن طريق كسياق /div/:

text() | em/text()

وأو دون استخدام السياق:

/div/text() | /div/em/text()

إذا كنت تريد أن CONCAT السلسلتين الأولى، استخدم هذا:

concat(/div/text(), /div/em/text())

إذا كنت تريد جميع الأطفال باستثناء ص، يمكنك محاولة ما يلي ...

    string-join(//*[name() != 'p']/text(), "")

والتي ترجع ...

This text node should be returned.
And the value of this element.
And this.

هل يمكن استخدام مقابل كل حلقة وكذلك تجميع القيم في متغير مثل هذا

<xsl:variable name="newstring">
    <xsl:for-each select="/div//text()">
      <xsl:value-of select="."/>
    </xsl:for-each>
  </xsl:variable>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top