Обрабатывать пустой #text в XML DOM - PullRequest
0 голосов
/ 23 июня 2011

У меня есть XML-документ следующего формата:

<root>
    <item>
        <type>link</type>
        <name>Nyan Cat!</name>
        <author></author>
        <content>http://nyan.cat/</content>
    </item>

    <item>
        <type>quote</type>
        <name>Belief and Intelligence</name>
        <author>Robert Anton Wilson</author>
        <content>Belief is the death of intelligence.</content>
    </item>
</root>

Как видите, все теги item имеют дочерние элементы type, name, author, content, однако в некоторых случаях тег author может содержать пустой #text дочерний элемент.

В файле Javascript у меня есть следующий код для получения текстовых значений этих тегов из элемента item DOM:

this.type = item.getElementsByTagName("type")[0].childNodes[0].nodeValue;
this.name = item.getElementsByTagName("name")[0].childNodes[0].nodeValue;
this.author = item.getElementsByTagName("author")[0].childNodes[0].nodeValue;
this.content = item.getElementsByTagName("content")[0].childNodes[0].nodeValue;

Переменная item является элементом DOM для тега <item>. Код работает нормально, когда автор не пуст, но когда author пуст, код не запускается. Как мне это решить? Если author пусто, то я хочу, чтобы значением его узла была пустая строка "".

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Вы должны проверить «не определено» для каждого свойства дерева.Как в:

if( typeof (element) == "undefined" ){ //set var to empty string }

Если вы попытаетесь получить доступ к свойству JavaScript, которое является нулевым или неопределенным, сценарий завершится ошибкой в ​​этой строке и не выполнит никаких строк после него.

Чтобы обойти сбой, вы можете обернуть те блоки кода, которые могут потерпеть неудачу в try{}catch(e){}

2 голосов
/ 23 июня 2011

Я думаю, вы должны проверить, сколько дочерних узлов у автора:

if (item.getElementsByTagName("author")[0].childNodes.length == 0) {
    this.author = '';
} else {
    this.author = item.getElementsByTagName("author")[0].childNodes[0].nodeValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...