XPath لإرجاع تسلسل سلسلة لقيم العقدة التابعة المؤهلة
-
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>