Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Разбор сложных XML тегов (https://javascript.ru/forum/jquery/32728-razbor-slozhnykh-xml-tegov.html)

NikolasGrad 28.10.2012 00:03

Разбор сложных XML тегов
 
Получаю с "YouTube Data API" XML с такими тегами:
<media:thumbnail url='http://some_url.com' yt:name='mqdefault'/>Some Text</media:thumbnail>
Подскажите, как обратиться к такому тегу?
1) Надо получить text()
2) Надо выбрать из нескольких "media:thumbnail" по значению атрибута "yt:name"
$.ajax({
      ...
      dataType: "xml",
      success: function(request){
        var some_text = $(request).find('media:thumbnail').text(); // НЕ РАБОТАЕТ
        var some_url = $(request).find("media:thumbnail[yt:name='mqdefault']").attr('url')); // НЕ РАБОТАЕТ
});

Первый раз сталкиваюсь с тегами и атрибутами содержащими ":".

DjDiablo 28.10.2012 00:21

двоеточее играет в jquery свою собственную роль
и во время запроса jquery будет воспринимать : как команду к выполнению функции идущей далее
А значит двоеточее как часть имени тега использовать едва-ли получиться.

Зато можно замутить по другому.
префикс\\:тег
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  type="text/javascript"></script>

<script>
XML='<media:entry ><media:thumbnail url="http://some_url.com" yt:name="mqdefault">Some Text</media:thumbnail></media:entry>';
$(function(){
         alert ( $(XML).find('media\\:thumbnail').eq(0).text() );
});
</script>

NikolasGrad 30.10.2012 02:19

Спасибо, префикс\\:тег ("media\\:thumbnail") работает.
И префикс\:атрибут ("yt\:name") тоже.
Сделал так:
request = "<media:thumbnail url='http://some_url.com' yt:name='mqdefault'/>Some Text</media:thumbnail>" +
          "<media:thumbnail url='http://another_url.com' yt:name='default'/>Another Text</media:thumbnail>";
var some_text, some_url,
  thumbnails = $(request).find("media\\:thumbnail");
$(thumbnails).each(function(){
  if($(this).attr("yt\:name") == "mqdefault"){
    some_text = $(this).text();
    some_url = $(this).attr("url");
  }
});

NikolasGrad 02.11.2012 02:47

Радость была преждевременной. Работает только в FF.
Ни Google, ни Opera, ни Safari, ни Yandex, ни тем более IE не распознают такой код.
Запросил у "YouTube Data API" JSON (по умолчанию XML), и всё наладилось.
JSON приходит вполне адекватный, да и работать с ним удобнее.


Часовой пояс GMT +3, время: 22:05.