Как уже было сказано, полезно, если вы разместите часть своего кода и образец 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');