Я использую следующий код для синтаксического анализа XML-файла:
foreach ($xml->product as $products) {
$title = $products->name; etc etc
Однако из-за структуры XML я должен использовать xpath на одном из узлов, который мне нужен, чтобы гарантировать, что он возвращает правильные данные
$actors = $xml->xpath("//property[name[. ='Actors']]/value");
$actor = $actors[0];
Это прекрасно работает, но всегда возвращает первую запись XML-файла, где он мне нужен, чтобы не отставать от цикла, если это имеет смысл.
Я попробовал следующее, но происходит то же самое:
$actors = $products->xpath("//property[name[. ='Actors']]/value");
Здесь речь идет о xml, однако в моем примере выше используется узел с именем name, в котором есть данные Actors, поменяйте его на Format, и у вас возникнет та же идея, что и под узлом, который находится под
<name>Format</name>
<properties>
<group>
<name>Product</name>
<property>
<id>48546006</id>
<name>Product name</name>
<value>JOLLY PHONICS (JOLLY PHONICS S.)</value>
</property>
</group>
<group>
<name>Product properties</name>
<property>
<id>43560296</id>
<name>Product Title</name>
<value>JOLLY PHONICS (JOLLY PHONICS S.)</value>
</property>
<property>
<id>43560292</id>
<name>Format</name>
<value>DVD</value>
</property>
</group>
</properties>
и вот полный цикл foreach, который я использую (некоторые из них я пропустил, поскольку вам не нужно читать несколько вещей, которые все работают правильно, как вы увидите:
foreach ($xml->product as $products) { // AA
$title = $products->name;
$PRid = $products->id;
$actors = $xml->xpath("//property[./name[.='Actors']]/value[next()]"); // this ok but repeats
$actors = $actors[0];
$genre = $xml->xpath("//property[name[. ='Genre']]/value");
$genre = $genre[0];
$prodcat = $products->{'category'};
$addline = mysql_query("
insert into dbname(
blah blah
)
VALUES (
blah blah
) ON DUPLICATE KEY UPDATE lowprice='$lowprice', highprice='$highprice'",$db);
if(!$addline) { echo "cannot add to table here".mysql_error(); exit; } // debug
foreach ($xml->product->retailer as $retailer) { // BB
this is another foreach loop but works perfectly
} // close BB
} // close AA
Итак, проблема в том, что у меня есть узлы в файле XML, которые мне нужно извлечь, которые всегда находятся внутри узла, называемого свойством, но я не могу просто использовать, например, name [2], поскольку они иногда находятся в разных местах - поэтому предлагается использовать xpath для получения данных от нужного мне узла, поскольку он более точен - и проблема в том, что он работает нормально, но по какой-то причине не будет просто получить данные из текущего узла, однако я пытаюсь ./ или .//, он всегда возвращает данные из первого узла.
Есть идеи?