JavaScript XML Parser: كيفية الحصول على العقد التي تحتوي على ":" في الاسم

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

  •  28-09-2019
  •  | 
  •  

سؤال

لدي الرمز التالي حيث أحاول الحصول على العقد C: CreationDate:

 value = '<?xml version="1.0" encoding="UTF-8"?><content><c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate></content>';

 xml = (new DOMParser()).parseFromString(value, 'text/xml');

 console.log(xml.getElementsByTagName('c:CreationDate'));

لسوء الحظ ، تعيد صفيفًا فارغًا ، بدلاً من صفيف مع العقدة الموجودة في XML. أعتقد أن هذا ناتج بسبب الرمز ":".

هل هناك طريقة للهروب منه؟

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

شكرًا!

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

المحلول

ال c في c:CreationDate يدل على مساحة الاسم XML بادئة. بادئة مساحة الاسم ليست سوى اختصار لمساحة الاسم. يجب تعريف مساحة الاسم في مكان ما في المستند مع xmlns:c ينسب. ولكن في المستند الخاص بك ، فإن تعريف مساحة الاسم مفقود.

لذلك يجب أن يبدو:

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content>' +
            '  <c:CreationDate xmlns:c="http://my.namespace">2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

أو

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content xmlns:c="http://my.namespace">' +
            '  <c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

في هذا المثال البادئة c تم تعيينه إلى مساحة الاسم http://my.namespace. ال CreationDate العلامة مسبوقة مع c, ، لذلك فهي تنتمي إلى مساحة الاسم http://my.namespace.

ثم يمكنك استخدام مساحة الاسم getElementsByTagNameNS() وظيفة للاستعلام عن عنصر CreationDate:

console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));

كمعلمة الأولى ، يجب عليك تمرير اسم مساحة الاسم الحقيقي وليس البادئة.

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