Я испробовал как подход SimpleXMLElement XPath, так и подход DOMDocument XPath, но, похоже, не все так просто, но по крайней мере с маршрутом SimpleXMLElement я мог бы распечатать результаты var и посмотреть, что происходит. на. (См. Результаты ниже)
Я хочу использовать XPath-запросы, не просматривая результаты. Полагаю, я просто хочу получить доступ к результатам, как к массиву, но, похоже, проблема заключается в том, чтобы обойти объекты SimpleXMLElement в этом массиве результатов.
Я запрашиваю фрагмент HTML с помощью div с определенным классом. Есть несколько div этого конкретного класса, так что все они возвращаются, и это нормально. Это то, что я хочу. Но теперь я хочу получить доступ к каждому и получить их значения, в большинстве случаев только у них есть дочерние элементы div.
Вот строка, которую я использую для выполнения запроса XPath:
$stats = $xml->xpath("//div[contains(@class,'line-item')]");
Вот вывод результатов print_r ():
// Output of $stats
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item
)
[div] => Array
(
[0] => Total items shipped
[1] => 50
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item-total
)
[div] => Array
(
[0] => TOTAL EARNINGS *
[1] => $267.23
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item-links
)
[a] => View full report
)
[3] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item
)
[div] => Array
(
[0] => Ordered items
[1] => 42
)
)
[4] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item
)
[div] => Array
(
[0] => Clicks
[1] => 428
)
)
[5] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item
)
[div] => Array
(
[0] => Conversion
[1] => 9.81%
)
)
[6] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => line-item-links
)
[a] => View full report
)
)
Теперь, поскольку я знаю, где находится каждое значение, я подумал, что могу просто получить к ним доступ следующим образом:
$y['clicks'] = "{$stats[4]['div'][0]}: {$stats[5]['div'][1]}\n";
$y['ordered'] = "{$stats[3]['div'][0]}: {$stats[4]['div'][1]}\n";
$y['shipped'] = "{$stats[0]['div'][0]}: {$stats[0]['div'][1]}\n";
$y['conversion'] = "{$stats[5]['div'][0]}: {$stats[6]['div'][1]}\n"; // Doesn't work
$y['rate'] = "{$stats[1]['div'][0]}: {$stats[4]['div'][1]}\n"; // Neither encased in {}
$y['total'] = 'Yesterday\'s Earnings: '.$stats[1]['div'][1]."\n"; // Nor as concatenated
Очевидная проблема заключается в том, что объект SimpleXMLElement вклинивается между элементами в массиве $ stats и массивом ['div'], чьи значения подэлементов мне нужны, которые скрываются за этими объектами SimpleXMLElement.
Так как же мне получить эти значения за пределами объектов SimpleXMLElement, не просматривая массив $ stats? Что-нибудь похожее на то, что я уже пробовал выше?