Как мне перемещаться по разным узлам разобранного XML в JavaScript - PullRequest
0 голосов
/ 22 октября 2019

Я работаю над простым «фоном движка обоев», если кто-нибудь из вас знаком с этим инструментом. Идея была бы такова:

Вы можете отредактировать простой XML-файл, чтобы добавить свою песню, название, автора и имя файла песни.

Пока все просто, ясделал XML-файл, который выглядит следующим образом:

<?xml version='1.0'?>
<songs>
    <song>
        <title>Test</title>
        <artist>Test</artist>
        <file>test.mp3</file>
    </song>
    <song>
        <title>Test</title>
        <artist>Test</artist>
        <file>test.mp3</file>
    </song>
    <song>
        <title>Test</title>
        <artist>Test</artist>
        <file>test.mp3</file>
    </song>
    <song>
        <title>Test</title>
        <artist>Test</artist>
        <file>test.mp3</file>
    </song>
</songs>

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

Вот когда у меня возникла проблема, мне удалось нормально разобрать файл xml, используя этокусок кода:

xmlHttp = new window.XMLHttpRequest();
xmlHttp.open("GET","./xml/songs.xml",false);
xmlHttp.send(null);
xmlDoc = xmlHttp.responseXML;

Но что вызвало у меня проблемы, так это способ, которым я должен перемещаться по этим узлам.

То, что я хотел бы сделать, это выбрать случайный узел «песня» тогдавыберите дочерний элемент 0, чтобы получить заголовок, выберите дочерний элемент 1, чтобы получить исполнителя, и так далее. Но, видимо, это работает по-другому.

Я посмотрел на Google, но единственные решения, которые я нашел, это то, что вы должны искать непосредственно заголовочный узел и так далее. Но мне не очень нравится эта идея.

Возможно ли сделать это так, как я описал или подобное?

Спасибо за ваше время и хорошего дня.

PS: вот код, который я использовал для навигации по узлам

var x = xmlDoc.getElementsByTagName("song");
var y = x[Math.floor(Math.random() * Math.floor(x.length))];
var z = y.childNodes[0].nodeValue;
alert(z);
...