Я анализирую несколько файлов XML. Пути к нужным узлам были сохранены в моей базе данных MySQL для легкого доступа.
Пути, которые не являются вложенными, не создают проблем. Но когда я сохраняю путь наподобие 'fields-> sub_category', кажется, возникает проблема с селектором '->'. Когда я буквально пишу путь в коде, он работает, но когда я извлекаю строку из базы данных и использую ее как переменную, она не работает. Почему я не могу использовать этот синтаксис в качестве переменной, когда он поступает из базы данных?
С помощью phpmyadmin я пытался изменить свойства индекса с varchar на текст, изменить параметры сортировки и т. Д., Но безрезультатно.
Я также пытался сохранить путь типа «подкатегория категории» без «->» и добавить его между ними, используя str_replace. Это тоже не работает.
$nodes = $connect->prepare("SELECT * FROM table");
$nodes->execute();
$node = $nodes->fetch(PDO::FETCH_ASSOC);
$title_node = $node['title']; //value is 'name'
$category_node = $node['subcategory']; //value is 'fields->sub_category'
$feedlink = "http://link.to.myfeed.com/feed.xml";
$x = new XMLReader;
$doc = new DOMDocument;
$x->open($feedLink);
while ($x->read() && $x->name !== 'product');
while ($x->name == 'product') {
$p = simplexml_import_dom($doc->importNode($x->expand(), true));
echo $p->$title_node; // Actually returns all the titles found
echo $p->$category_node; // Does absolutely nothing
}
Я ожидал
echo $p->$category_node;
вернет фактические данные в этом узле, но вместо этого путь не найден. Что происходит со строкой, содержащей специальные символы '->'?
Вот сокращенная версия структуры XML:
<product>
<name>Productname</name>
<price>99.99</price>
<fields>
<categories>Main category data</categories>
<color>Black</color>
<sub_category>Sub category data</sub_category>
</fields>
</product>