سؤال

JavaScript:

var req=xmlDoc.responseXML.selectSingleNode("//title");
alert(req.text);

كما هو متوقع ، إرجاع نص العقدة "العنوان" الأولى.

لكن هذا

var req=xmlDoc.responseXML.selectNodes("//title");
alert(req.text);

يعود "غير محدد". ما يلي:

var req=xmlDoc.responseXML.selectNodes("//title").length;
alert(req);

يعود "2." انا لم احصل عليها. ربما عندما أقوم بتحديد NODES ، فإنه لا يحصل على عقدة النص داخل العنوان. هذا تخميني الآن ... ها هو XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<decal>
<company>Victor</company>
<title>Wood Horn Blue Background</title>
<image>
<url>victor01.jpg</url>
<width>60</width>
<height>60</height>
<name>Wood Horn Blue Background</name>
<link></link>
</image>
<price>$15.00</price>
<instock>In Stock</instock>
<notes>no extra info</notes>
</decal>
<decal>
<company>Victor</company>
<title>Wood Horn without Black Ring</title>
<image>
<url>victor02.jpg</url>
<width>60</width>
<height>60</height>
<name>Wood Horn Without Black Ring</name>
<link></link>
</image>
<price>$15.00</price>
<instock>In Stock</instock>
<notes>no extra info</notes>
</decal>
</catalog>

شكرًا

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

المحلول

يقوم SelectNodes بإرجاع صفيف بدلاً من عقدة واحدة (وبالتالي تسمية الجمع للطريقة).

يمكنك استخدام فهرس للحصول على العقد الفردية:

var req=xmlDoc.responseXML.selectNodes("//title");
for (var i=0;i<req.length;i++) {
   alert(req[i].text);
}

نصائح أخرى

selectNodes يعيد صفيف.

لذلك ، عندما تكتب var req=xmlDoc.responseXML.selectNodes("//title"), ، ال req متغير يحمل مجموعة مصفوفة من العناصر.
نظرًا لأن المصفوفات لا تحتوي على ملف text خاصية ، أنت تحصل undefined.

بدلاً من ذلك ، يمكنك الكتابةreq[0].text للحصول على نص العنصر الأول في الصفيف.

كما يوحي اسم الطريقة ، selectNodes إرجاع مجموعة (صفيف). تحتاج إلى حلقة عليهم. أو إذا كنت متأكدًا من الهيكل ، فاحصل على العنصر الأول.

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