Получить значения в массиве из XPATH в Javascript - PullRequest
0 голосов
/ 21 декабря 2018

Как получить повторное значение объекта, возвращенного из запроса XPATH.

У меня есть этот шаблон HTML:

<div class="item">
<span class="light">Date</span>
<a class="link" href="">2018</a>
(4pop)
</div>

<div class="item">
<span class="light">From</span>
<span>
<a class="link" href="" title="Bob" itemprop="url"><span itemprop="name">Bob</span></a>,
</span>
<span>
<a class="link" href="" title="Peter" itemprop="url"><span itemprop="name">Peter</span></a>
</span>
</div>

<div class="item">
<span class="light">For</span>
<a class="link" href="">Bak</a>,
<a class="link" href="">Cam</a>,
<a class="link" href="">Oli</a>
</div>

<div class="item">
<span class="light">Nat</span>
<a class="link" href="">Cool</a>
</div>
</div>    

И мой код Javascript:

var doc = new DOMParser().parseFromString(HTMLContent,'text/html');
var infos = doc.evaluate('//div[@class="item"]/span[1]', doc, null, XPathResult.ANY_TYPE, null);

var nodes = [];
for(var node = infos.iterateNext(); node; node = infos.iterateNext()) {
    nodes.push(node);
    console.log(node.textContent);

    // Until here, all things works well ! Except the code from here:
    var nodde = node.nextElementSibling.attributes;

    nodde.forEach(function(item){
        console.log(item);
    });
}

Моя цель - получить соответствующее значение для каждой категории, например:

Date = 2018, (4pop)
From = Bob, Peter
For = Bak, Cam, Oli
Nat = Cool

Я пытался повторить: node.nextElementSibling.attributes, но безуспешно!

Что я пробовал:

var nodde = node.nextElementSibling.attributes;
nodde.forEach(function(item){
    console.log(item);
});

Вы можете проверить это по коду Javascript, но, к сожалению, это даст нулевой результат.

Есть ли способ получить ожидаемый результат, пожалуйста?

1 Ответ

0 голосов
/ 22 декабря 2018

После того, как вы получите предмет, вы можете перебирать childNodes, включая теги и тексты.

var items = document.evaluate('//div[@class="item"]', doc, null, XPathResult.ANY_TYPE, null);
while (item = items.iterateNext()) {
    var values = [];
    var nodes = item.childNodes;
    for (var i = 2; i < nodes.length; i++) {
        var value = nodes[i].textContent.trim().replace(',', '');
        if (value.length) values.push(value);
    }
    console.log(item.getElementsByClassName('light')[0].innerText + " = " + values.join(', '));
}

Печать:

Date = 2018, (4pop)
From = Bob, Peter
For = Bak, Cam, Oli
Nat = Cool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...