تقنية

findall في ElementTree: هل اسم الوسم يبحث بكل الأعماق؟

findall("leaf") يجد bud المباشر وحده هنا.
المباشر: bud.

findall("leaf") يختار الأبناء المباشرين بهذا الوسم؛ .//leaf يختار المطابقين في المستويات التابعة كلها. [1]

الخلاصة السريعة

لا؛ استخدم المسار المناسب للعمق المطلوب. [1]

  • findall("leaf") يختار الأبناء المباشرين بهذا الوسم؛ .//leaf يختار المطابقين في المستويات التابعة كلها. [1]
  • findall يعيد قائمة العناصر المطابقة بترتيب المستند؛ تبدأ المسارات هنا من root. [1]
  • على CPython 3.12.14، root أدناه له leaf بنص bud وbranch بداخله leaf بنص seed. [1]
  • leaf يعطي عنصر bud فقط؛ .//leaf يعطي bud ثم seed، وهما العنصران الموجودان نفسيهما. [1]
  • تحكم: البحث عن leaf من branch يعطي seed؛ أزواج الوسم والنص تطابق قيمًا مؤلفة مستقلة؛ تبقى الشجرة والمدخل. [1]

ابن مباشر أو عنصر تابع

findall("leaf") يختار الأبناء المباشرين بهذا الوسم؛ .//leaf يختار المطابقين في المستويات التابعة كلها. [1]

قائمة مرتبة

findall يعيد قائمة العناصر المطابقة بترتيب المستند؛ تبدأ المسارات هنا من root. [1]

مستويان في شجرة

على CPython 3.12.14، root أدناه له leaf بنص bud وbranch بداخله leaf بنص seed. [1]

import xml.etree.ElementTree as ET raw=("<root><leaf>bud</leaf>" "<branch><leaf>seed</leaf></branch></root>") root=ET.fromstring(raw) direct=root.findall("leaf") deep=root.findall(".//leaf") [1]

.//leaf يجد bud ثم seed المتداخل هنا.
التابع: bud ثم seed.

النطاق والتحكم

leaf يعطي عنصر bud فقط؛ .//leaf يعطي bud ثم seed، وهما العنصران الموجودان نفسيهما. [1]

for nodes in (direct,deep,root[1].findall("leaf")): print([node.text for node in nodes]) [1]

تحكم: البحث عن leaf من branch يعطي seed؛ أزواج الوسم والنص تطابق قيمًا مؤلفة مستقلة؛ تبقى الشجرة والمدخل. [1]

المراجع

  1. Python ElementTree

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.