سؤال

في XSLT 1.0، يمكنك الحصول على الاسم المحلي أو Namespaceuri لعنصر XML باستخدام الوظائف:

string local-name (node)

و

string namespace-uri(node)

ولكن هل هناك معيار وظيفة للحصول على اختصار عنصر له اسم مؤهل؟

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

المحلول

ليس بقدر ما أعرف. إذا كنت متأكدا من اسم العقدة لديه بادئة، يمكنك استخدام هذا:

substring-before(name(), ':')

أو هذا، إذا لم تكن متأكدا:

substring-before(
  name(), 
  concat(':', local-name())
)

يعتمد التعبير الأخير على حقيقة أن substring-before() إرجاع السلسلة الفارغة عند عدم العثور على السلسلة التي تم البحث عنها. بهذه الطريقة سيعمل بشكل صحيح على البادئة و أسماء غير مربيهة.

نصائح أخرى

بشكل عام، إذا كنت تهتم بادئة عنصر، فأنت تفعل ذلك خطأ. يجب أن تهتم فقط بأي اسم مساحة الاسم التي تنتمي إليها.

في تعليقك، تلاحظ أن API الذي تتحدث إليه يتطلب منك توفير مساحة الاسم وبادئة مساحة الاسم. هذا صحيح، لكن API الذي ترتبط به لا يهتم فعلا ما هو بادئة مساحة الاسم - في الواقع، وسوف تولد بادئة مساحة الاسم عشوائيا إذا لم تقدم واحدة.

إذا كنت تقوم بإنشاء مستندات XML بأكملها، فمن اللطيف إذا كان لديك تعيين واحد إلى واحد من البادئات إلى مساحة الاسم URIS؛ يجعل الإخراج أسهل في فهمه. لكنه لا يهم حقا ما هي هذه البادئات.

لمزيد من الفروق الدقيقة، أوصي بالقراءة "مخاطر الاسم () وظيفة".

على سبيل المثال، فقط في XPath 2.0 هل يمكنك الحصول على بادئة عنصر. في XPath 1.0، فإن البادئة المستخدمة بواسطة عنصر ليست جزءا من طراز البيانات.

إعطاء XML التالي:

<my:foo xmlns:my="http://example.com" xmlns:my2="http://example.com"/>

اسم () الوظيفة في XPath 1.0 يمكن إرجاع قانونيا إما "MY: FOO" أو "MY2: FOO". ولكن في XPath 2.0، ذلك يجب إرجاع "بلدي: فو".

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