كيفية تحديد جميع العقد الأوراق باستخدام تعبير XPath؟

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

  •  30-09-2019
  •  | 
  •  

سؤال

أعتقد أنه ممكن ولكن لم أستطع معرفة بناء الجملة. شيء من هذا القبيل:

xmlNode.SelectNodes("//*[count(child::*) <= 1]")

لكن هذا ليس صحيحا.

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

المحلول

يستخدم:

//node()[not(node())]

في حالة فقط عنصر العقد الورقية مطلوبة (وهذا يحتاج إلى توضيح-هل العناصر التي تعتبر الأطفال غير العناصرين يعتبرون العقد الورقية؟) ، ثم يختارها تعبير XPath التالي:

//*[not(*)]

كلا التعبيرات أعلاه ربما يكون أقصر التي تحدد العقد المطلوبة (إما أي عقدة أو عنصر-العقد الأوراق).

نصائح أخرى

أي عناصر بدون طفل عناصر

//*[not(child::*)]

لماذا أقل أو متساوٍ إلى 1 ؟

xmlNode.SelectNodes("//*[count(child::*) = 0]")

قم بإجراء الاختبارات وما إلى ذلك في هذا الموقع http://www.whitebeam.org/library/guide/technotes/xpathtestbed.rhtm

مفيد جدا ..

أقوم بإضافة إجابة XSLT هذه لأنه يبدو أن مباريات Google الأمامية تفتقر إلى مثل هذا الحل:

بعد صراع طويل مع استخراج CDATA مثل XML ، في النهاية ، عمل هذا التعبير بشكل أفضل بالنسبة لي:

<xsl:template match="*[not(child::*)]/text()">
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top