Как получить атрибут узла с пространством имен в JavaScript? - PullRequest
0 голосов
/ 29 октября 2011

Я пытаюсь проанализировать XML-файл Reddit с помощью javascript, и у меня возникают проблемы с получением атрибута из узла с пространством имен.Я хочу получить следующий URL

<media:thumbnail url="http://f.thumbs.redditmedia.com/LdOsi1MnWuzGvbDq.jpg"/>

То, что я пробовал до сих пор, но ни один из них не сработал:

<script type="text/javascript">
//...XMLHttpRequest...
           var items = data.getElementsByTagName("item");

            for (var i = 0; i < items.length; i++) {
                var item = items[i];

                //titleNode and title work fine
                var titleNode = item.getElementsByTagName("title")[0];
                var title = titleNode.firstChild.data;

                //the following don't work, they actually cause the google chrome extension to stop working :(

                //attempt 1
                thumbnail = item.getElementsByTagName('thumbnail')[0];

                //attempt 2
                thumbnail = item.getElementsByTagName('media:thumbnail')[0];

                //attempt 3    
                thumbnail = item.getElementsByTagName('media', 'thumbnail')[0];

                //attempt 4
                thumbnail = item.getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'thumbnail')[0];

                //attempt 5
                thumbnail = item.getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'thumbnail')[0].getAttriubte("url");

                //attempt 6
                thumbnail = item.getElementsByTagNameNS('http://search.yahoo.com/mrss/', 'thumbnail')[0].firstChild.data;

                document.write(thumbnail);
            }
</script>

Я потерян, вы можете предложитьлюбая помощь?

1 Ответ

1 голос
/ 29 октября 2011
.getElementsByTagName('media:thumbnail')

работал для меня =) [В Chrome] Хотя я должен отметить, что в конкретном XML-файле, на который вы ссылались, первые несколько элементов не содержат <media:thumbnail> тегов.

Вы должны проверить длину результата вызова для getElementsByTagName ДО попытки извлечь n-й (или в вашем случае 0-й) элемент, так как это вызовет ошибку.

1010 *, например *

var thumbnail=null,mediaTs=item.getElementsByTagName('media:thumbnail');
if(mediaTs.length){
   thumbnail=mediaTs[0].getAttribute('url');
}

//Later on
if(thumbnail){
   //Do stuff with the string
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...