سؤال

هل هناك أي فرق بين

<opensearch:totalResults>1000</opensearch:totalResults>

و

<totalResults xmlns="opensearch">1000</totalResults>

أنا أستخدم فئة SyndicationFeed في .NET لإنشاء خلاصة ذرة ، وأحتاج إلى إضافة بعض العناصر لمعيار OpenSearch ، لكنها تستمر في إضافة عناصر مثل العناصر الأخيرة أعلاه عندما أريد أن تضيفها مثل السابق.

الرمز:

feed.ElementExtensions.Add("totalResults", "opensearch", "2");

تعديل

تبدو علامة تغذية الجذر هكذا

<feed xml:lang="en-US" p1:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:p1="xmlns" xmlns="http://www.w3.org/2005/Atom">

بعد تغيير الكود الخاص بي كما هو مقترح RredDog ، يبدو عنصر TotalResults هكذا

<totalResults xmlns="http://a9.com/-/spec/opensearch/1.1/">1000</totalResults>

الرمز الذي يضيف مساحة الاسم إلى علامة التغذية يبدو هكذا

feed.AttributeExtensions.Add(
    new XmlQualifiedName("opensearch", "xmlns"),
    @"http://a9.com/-/spec/opensearch/1.1/");

والرمز الذي يضيف عنصر TotalResults يبدو الآن هكذا

feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
هل كانت مفيدة؟

المحلول

لا تهتم. أدركت أنني كنت أضيف مساحة الاسم بشكل غير صحيح. يجب أن يكون

feed.AttributeExtensions.Add(
   new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
   "http://a9.com/-/spec/opensearch/1.1/");

نصائح أخرى

مساحات الأسماء

ورثت مساحات الأسماء الافتراضية من العنصر الأصل. وإلا ، يمكنك تحديد الأسماء المستعارة الجديدة لأطفالك لاستخدامها مع xmlns:alias= بناء الجملة أو يمكنك إعادة تعريف مساحة الاسم الافتراضية لاستخدامها لعنصر (وبالطبع أطفاله) باستخدام xmlns= بناء الجملة.

المثال الأول:

<opensearch:totalResults>1000</opensearch:totalResults>

يتطلب أن يتم تحديد اسم اسم اسم اسم "OpenSearch" بواسطة عنصر الأصل - ربما في مساحة اسم مختلفة. فمثلا:

<myRoot xmlms:opensearch="http://a9.com/-/spec/opensearch/1.1/">
    <opensearch:totalResults>1000</opensearch:totalResults>
</myRoot>

على الرغم من أن هذا يعني أن عنصر "myroot" في مساحة اسم مختلفة - أي العنصر الافتراضي (مع مساحة اسم فارغة أو تلك المحددة من قبل الوالد).

الإدراج

من أجل إضافة العنصر فعليًا مع مساحة الاسم الصحيحة ، ستحتاج إلى استخدام مساحة الاسم نفسها ، بدلاً من الاسم المستعار ("OpenSearch").

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

على سبيل المثال

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", 1000);

ولكن لاحظ أنه سيكون لديك سيطرة محدودة أو بدون تحكم في الاسم المستعار المعين على مساحة الاسم. من أجل القيام بذلك ، سيتعين عليك السيطرة على عملية تسلسل XML ...

لتكون أكثر اكتمالا.

تعيين حدد مساحة الاسم على عنصر القناة مع:

feed.AttributeExtensions.Add(
  new XmlQualifiedName("opensearch", XNamespace.Xmlns.ToString()),
 "http://a9.com/-/spec/opensearch/1.1/");

وحدد مساحة الاسم على TotalResults مع:

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", "1000");

سوف يمنحك:

<opensearch:totalResults>1000</opensearch:totalResults>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top