2014-11-09 2 views
1

У меня есть файл HTML5 с javascript для чтения в локальном XML-файле.Невозможно отобразить имя элемента XML, используя Javascript

Один элемент в структуре XML является динамическим и содержит внутренний xml, без значения.

При попытке отобразить это имя на веб-странице, все, что я вижу, это #text.

Пример XML:

<Students> 
    <student id="1"> 
     <Connor> 
      <age>20</age> 
      <gender>male</gender> 
     </Connor> 
    </student> 
    <student id="2"> 
     <Fiona> 
      <age>25</age> 
      <gender>female</gender> 
     </Fiona> 
    </student> 
</Students> 

Javascript:

var x = xmlDoc.getElementsByTagName("student"); 

for(i = 0; i < x.length; i++) 
{ 
    var id = x[i].getAttribute("id"); 

    var name = x[i].childNodes[0].nodeName;  // produces '#text' 
    // var name = x[i].firstChild.nodeName;  // produces '#text' 

    document.write("<p>name = " + x[i].childNodes[0].nodeName + "</p>"); // produces '#text' 

    var age = x[i].getElementsByTagName("age")[0].childNodes[0].nodeValue; 
    var gender = x[i].getElementsByTagName("gender")[0].childNodes[0].nodeValue; 

    var student= {id:id, name:name, age:age, gender:gender }; 
} 

В моем примере XML я понимаю, что имя студента может быть лучше хранится, но это всего лишь пример, основанный на фиксированном XML структура, с которой я работаю.

Кроме того: чтение и отображение XML-файла работает только при работе с IDE. В конечном итоге мне захотелось запустить файл .html и прочитать javascript-код в XML-файле (хранящемся в том же месте, что и файл html), и отобразить его данные.

Редактировать: Первая часть решена. Все еще можно было использовать помощь над «Далее» выше.

ответ

0

Я нашел подходящий ответ для первой части моего вопроса, которая представляется дубликатом:

Javascript/XML - Getting the node name

Я только видел это сейчас в связанных вопросах самостоятельно. Это не было показано мне при поиске или при написании моего вопроса. Итак, реквизит @ T.J. Crowder

мое решение:

var nameNode = x[i].firstChild; 

while(nameNode.nodeType != 1) 
{ 
    nameNode = nameNode .nextSibling; 
} 

var name = nameNode; 
1

Ahh этот старый каштан, у меня была та же проблема, попробуйте

var name = x[i].children[0].nodeName; 

Это должно получить только первую XML.

Basicallly проблема в вашем списке у вас есть 0: текст 1: XMLNode, 2: XMLnode ect.

И получить только XML материал, вы можете использовать детей, а затем ChildNodes, очень похож на HTML Elements EDIT этот пример не работает

Фактический ответ:

Вам нужно для проверки типа ребенка с помощью typof при циклическом переходе

+0

Привет Джей. Спасибо, что ответили. Кажется, это не похоже на 'x [i] .children [0] .nodeName': S Я попытался использовать' write() ', сначала распечатав тестовое сообщение, затем вашу предложенную строку, а затем еще одно тестовое сообщение. Все, что я вижу, это первое тестовое сообщение, в котором указано, что «дети» не определены. – tjheslin1

+0

Ahh Мне нужно найти свой код и вернуться к вам! – Jay

+0

Я решил это сейчас и разместил ссылку на соответствующий вопрос. Вы были верны в отношении nodeType, так что спасибо. : D – tjheslin1

Смежные вопросы