تقنية

ElementTree في بايثون: لماذا لا يجد find الوسم leaf؟

مع xmlns=urn:bud، البحث عن leaf يعطي None في المثال.
الاسم القصير لا يطابق.

فضاء الأسماء يميز الوسم بمعرّف؛ مع الافتراضي يتمدد leaf إلى {urn:bud}leaf في مثالنا. [1]

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

لأن leaf هنا داخل فضاء أسماء؛ ابحث بالاسم الموسع أو بخريطة. [1]

  • فضاء الأسماء يميز الوسم بمعرّف؛ مع الافتراضي يتمدد leaf إلى {urn:bud}leaf في مثالنا. [1]
  • find يعيد أول عنصر مطابق أو None. [1]
  • على CPython 3.12.14، root أدناه له ابن بنص seed؛ البحث عن leaf وحدها يعطي None. [1]
  • الاسم الموسع أو خريطة البادئة الفارغة يعثران على الابن نفسه. [1]
  • تحكم: شجرة بلا فضاء أسماء تقبل leaf؛ الوسم والنص يطابقان قيمتين مؤلفتين؛ يبقى المدخل. [1]

اسم موسع

فضاء الأسماء يميز الوسم بمعرّف؛ مع الافتراضي يتمدد leaf إلى {urn:bud}leaf في مثالنا. [1]

معنى نتيجة البحث

find يعيد أول عنصر مطابق أو None. [1]

فضاء أسماء افتراضي

على CPython 3.12.14، root أدناه له ابن بنص seed؛ البحث عن leaf وحدها يعطي None. [1]

import xml.etree.ElementTree as ET raw="<root xmlns='urn:bud'><leaf>seed</leaf></root>" root=ET.fromstring(raw) print(root.find("leaf") is None) [1]

البحث بالاسم {urn:bud}leaf يجد ابنًا بنص seed.
الاسم الموسع يجد الابن.

بحث وتحكم

الاسم الموسع أو خريطة البادئة الفارغة يعثران على الابن نفسه. [1]

expanded=root.find("{urn:bud}leaf") mapped=root.find("leaf",{"":"urn:bud"}) print(expanded is mapped,expanded.text) plain=ET.fromstring("<root><leaf>seed</leaf></root>") print(plain.find("leaf") is not None) [1]

تحكم: شجرة بلا فضاء أسماء تقبل leaf؛ الوسم والنص يطابقان قيمتين مؤلفتين؛ يبقى المدخل. [1]

المراجع

  1. Python ElementTree

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

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