Я пробовал как подход SimpleXMLElement XPath, так и подход DOMDocument XPath, но, похоже, не может выглядеть так, как угодно, но, по крайней мере, с помощью пути SimpleXMLElement, я мог бы фактически распечатать результаты var и посмотреть, что происходит. (См. Результаты ниже)Доступ к свойствам SimpleXMLElement без цикла
Я хочу использовать запросы XPath, не зацикливая результаты. Думаю, я просто хочу получить доступ к результатам, подобным массиву, но проблема, похоже, проходит мимо объектов SimpleXMLElement внутри этого массива результатов.
Я запрашиваю фрагмент HTML с помощью 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? Что-нибудь похожее на то, что я уже пробовал выше?
Не используйте 'print_r()'. Не публикуйте вывод 'print_r()'. Отправьте исходный XML, что вы хотите сделать и как вы пытаетесь это сделать. –