У меня есть сценарий, который проходит через объект SimpleXML, загруженный из файла, который сохраняется на сервере. Теперь, если что-то не так, когда я обрабатываю XML-файл, я хочу, чтобы скрипт сообщал об ошибке, и предпочтительно, в строке ребенка, где произошла ошибка.PHP SimpleXML, get line of child во время цикла foreach
Пример XML:
<xml>
<product>
<name>Product one</name>
<price>3.50</price>
</product>
<product>
<name>Product two</name>
<price>42.00</price>
</product>
</xml>
Мой сценарий обрабатывает файл XML так:
<?php
$log = 'Error log'.PHP_EOL;
$xml = simplexml_load_file('file.xml');
foreach($xml->'product' as $key->$val) {
if(everything_is($okay)) {
//process product
}
else {
$log .= 'There was an error with the product on line '.$childLine.PHP_EOL;
}
}
file_put_contents('log.txt',$log);
?>
Теперь, что мне нужно знать, здесь есть, есть способ найти, какая строка текущего ребенка в цикле foreach включена в файле XML? ..
Я знаю, что libxml_get_errors()
сообщает о линии XML-ошибки, но если я определяю, что у продукта есть недостатки, я хочу узнать, в какой строке отображается продукт в файле XML.
Я думал что-то, где я использую ключ $ ребенка, чтобы спросить simpleXML, где он нашел этот ребенок или что-то в этом роде, но я не знаю, как это сделать.
Если у кого-то есть решение или предложение, не стесняйтесь поделиться им.
Спасибо за ответ, вы можете привести пример того, как мой сценарий выше будет работать с DOM? Потому что я понятия не имею, как использовать DOM для чтения XML. –
@ Kristoffer: Это довольно просто. Я обновил свой ответ. –
Спасибо, он работает. Я буду использовать DOM для моего скрипта позже. –