2014-02-18 3 views
0

Im работы с XML-кода в JavaScript, чтобы попытаться создать Heatmap, то XML выглядит следующим образом:XML синтаксический анализ заголовка с атрибутами в нем?

<trk> 
<name>Oscar</name> 
<trkseg> 
<trkpt lat="20.922436" lon="-32.950274"> 
     <ele>35.23</ele> 
     <time>2013-04-28T09:23:11Z</time> 
    </trkpt> 
    <trkpt lat="21.231232" lon="-30.9123123"> 
     <ele>35.23</ele> 
     <time>2013-04-28T09:23:11Z</time> 
    </trkpt> 
    </trkseg> 
</trk> 

Но я не могу показаться, чтобы иметь возможность целевой «trkpt», поскольку он содержит лат = и lon = значение, которое всегда отличается. Как настроить таргетинг на этот заголовок? Я пробовал использовать:

getElementsByTagName("trkpt") 

но он cannnot найти информацию - Что мне здесь не хватает?

Спасибо за помощь.

UPDATE

Фрагмент кода, который объясняет, что я пытался до сих пор:

var xmlParsing = new XMLHttpRequest(); 
var xmlDoc = "Hello"; 
var readyString = "asd"; 

xmlParsing.open("GET","3.xml", false); 
xmlParsing.send(); 

xmlDoc = xmlParsing.responseXML; 


var x=xmlDoc.getElementsByTagName("trk"); 
var y = xmlDoc.getElementsByTagName("trkseg"); 

for (i=0;i<x.length;i++){ 



    document.write(x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue); 

    document.write(": <em>"); 

    for (e=0; e < y.length; e++) { 
    document.write(y[e].getElementsByTagName("trkpt")[0].childNodes[0].nodeValue); 
    } 

    document.write("</em> <br>"); 
    } 

Это в основном только, чтобы попытаться напечатать значения, чтобы увидеть, что я делаю.

В результате возвращает это:

Oscarnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull

+2

Атрибуты не будет иметь никакого влияния на 'getElementsByTagName'. Какова бы ни была проблема, он не раскрывается кодом, которым вы поделились. Попробуйте создать уменьшенный тестовый пример. http://sscce.org/ – Quentin

+0

Итак, как я могу настроить таргетинг? – Paul

+2

Покажите нам, пожалуйста, полный код, пожалуйста, вопрос должен быть в другом месте. –

ответ

3

Проблема с:

y[e].getElementsByTagName("trkpt")[0].childNodes[0].nodeValue 

childNodes этого элемента не то, что вы ожидаете. Если вы делаете:

console.log(y[e].getElementsByTagName("trkpt")[0].childNodes); 

, то вы увидите следующее:

[text, ele, text, time, text] 

Вам нужно отфильтровать текстовые узлы. Вы можете попробовать использовать:

y[e].getElementsByTagName("trkpt")[0].firstElementChild.textContent 

Но если вы хотите, чтобы другие узлы, то вы должны цикла и отфильтровать текстовые узлы:

var children = y[e].getElementsByTagName("trkpt")[0].childNodes; 
for(var c=0; c < children.length; c++){ 
    if(children[c].nodeType == Node.ELEMENT_NODE){ 
     // Do whatever 
     console.log(children[c].textContent); 
    } 
} 
+0

Спасибо! Это работало как шарм! – Paul

+0

Добро пожаловать :-) –

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