2013-12-15 3 views
0

Я использую pugixml разобрать следующий XML:pugixml: выбор узлов не удается

<td class="title"> 
    <div class="random" /> 
    <a href="link">Link1 </a> 
</td> 

<td class="title"> 
    <div class="random" /> 
    <a href="link">Link2 </a> 
</td> 

и т.д ...

Я хочу значение каждой 'A HREF' в классе тд =» title "(который появляется неопределенное количество раз), но только первый такой экземпляр.

Я использую следующий код, чтобы попытаться получить эти значения:

pugi::xpath_node_set link_nodes = list_doc.select_nodes("//td[@class='title']"); 

    for (pugi::xpath_node_set::const_iterator it = link_nodes.begin();it != link_nodes.end();++it) 
    { 
     pugi::xpath_node single_link_node = *it; 

     std::cout << single_link_node.node().select_single_node("//a").node().attribute("href").value()<<std::endl; 


    } 

, который, кажется, не работает (он выдает количество раз, но со значением, которое даже не кажется, появляется в этот элемент).

Спасибо.

ответ

0

«// a» выбирает все «а» узлы в документе; вы, вероятно, имели в виду «.//a», который выбирает все «а» узлы в поддереве.

Вы также можете использовать одно выражение XPath вместо нескольких:

//td[@class='title']//a[1] 

Это выбирает первый тег для каждого Td - то есть [1] относится только к // а, не для полного выражения.