هل تنتشر مساحات الأسماء إلى الأطفال في كائنات XElement؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

إذا كان لدي عنصر XElement يحتوي على عناصر فرعية، وإذا قمت بإزالة عنصر فرعي من العنصر الأصلي، وإزالة جميع المراجع بين الاثنين، فهل سيكون لعنصر XElement الفرعي نفس مساحات الأسماء مثل الأصل؟

بمعنى آخر، إذا كان لدي ملف XML التالي:

<parent xmlns:foo="abc">
    <foo:child />
</parent>

وقمت بإزالة العنصر الفرعي، هل سيبدو شكل XML الخاص بالعنصر الفرعي

<child xmlns="abc" />

أو مثل

<child />
هل كانت مفيدة؟

المحلول

الجواب هو نعم، مساحات الأسماء تنتشر للأطفال.

ليس عليك تحديد مساحة الاسم ضمن العناصر الفرعية.يتضمن نطاق مساحة الاسم جميع العناصر حتى علامة الإغلاق للعنصر الذي تم تعريفه فيه.

انظر القسم رقم 6.1 هنا http://www.w3.org/TR/REC-xml-names/#scoping

امل ان يساعد

نصائح أخرى

إذا قمت بتضمين العنصر المذكور في شجرة XML الجديدة، فسيكون في نفس مساحة الاسم.

var xml1 = XElement.Parse("<a xmlns:foo=\"abc\"><foo:b></foo:b></a>");
var xml2 = XElement.Parse("<a xmlns:boo=\"efg\"></a>");
XNamespace ns = "abc";
var elem = xml1.Element(ns + "b");
elem.Remove();
xml2.Add(elem);
Console.WriteLine(xml1.ToString());
Console.WriteLine(xml2.ToString());

نتيجة:

<a xmlns:foo="abc" />
<a xmlns:boo="efg">
   <b xmlns="abc"></b>
</a>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top