Нужна помощь в разборе данных из XML через JavaScript - PullRequest
1 голос
/ 29 декабря 2011

Я пытаюсь создать переносимое приложение на javascript, которое извлекает данные из файла XML и отображает их в сетке данных. Эти данные имеют некоторые поля, в которых определенно будут содержаться некоторые данные, а некоторые поля могут содержать или не содержать данные. Второе поле принадлежит автору, и мои данные могут содержать от 1 до 9 авторов. Все эти данные находятся в файле Excel, из которого я конвертировал их в xml, и он, очевидно, не содержит тегов типа <author2>, <author3> и так далее, если их нет для записи.

Во-первых, при разборе данных через javascript я должен был сохранить это:

document.createTextNode(x[i].getElementsByTagName("author3")[0].childNodes[0].nodeValue);

... в блоке try-catch, так как я не мог найти никакой альтернативы. Простая проверка существования тега с помощью «если» не работает. Я думаю, что этот метод не очень эффективен.

Во-вторых, в поле авторов, я хочу добавить столько строк в каждой строке таблицы, сколько авторов в записи. Для этого я попытался добавить \n между авторами и создать из него текстовый узел, но это не помогло.

1 Ответ

0 голосов
/ 29 декабря 2011

Как уже было сказано, полезно, если вы разместите часть своего кода и образец XML .

Сказав это, вот несколько подсказок, которые могут (или не могут) помочь вам.

Вы говорите «Простая проверка существования тега с помощью if не работает» . Я предполагаю, что вы хотели сделать что-то вроде этого:

if (x[i].getElementsByTagName("author3")[0]) { /* [...] */ }

... дал вам TypeError.

Причина этого довольно проста. Если <author3> не существует, getElementsByTagName вернет пустую коллекцию. Из-за этого x[i].getElementsByTagName("author3")[0] всегда будет undefined.

Вы можете исправить это несколькими способами. Одним из способов является использование try / catch, что является вполне допустимым решением. Другой способ - проверить длину коллекции, например:

var author3 = x[i].getElementsByTagName("author3");
var author3_name;
var author3_node;

if (author3.length > 0) {
    author3_name = author3[0].childNodes[0].nodeValue;
    author3_node = document.createTextNode(author3_name);
    // Do something with author3_node
}

Обратите внимание, что это все равно выдаст TypeError, если, например, у тега <author3> окажется, что нет детей ...

Что касается вашей второй проблемы: в HTML любые ненужные пробелы игнорируются. Это включает символы новой строки (\n). Чтобы вставить разрыв строки в HTML, вам нужно добавить <br />:

document.createElement('br');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...