从XML(图像+价格)中获取文章



screenshot在这种情况下,我得到每个文章的第一个图像,但只有相同的价格为所有的文章,见截图。我想显示每一个产品的图片与相关的价格在下面。我使用数组唯一来删除图像重复,我认为这是错误的。我正在从xml获取数据。

<PRODUCTDATA>
<PRODUCT>
<P_NAME>
<VALUE>Lether Jacket</VALUE>
</P_NAME>
<ARTICLEDATA>
<ARTICLE>
<A_PRICEDATA>
<A_PRICE>
<A_VK>34.95</A_VK>
</A_PRICE>
</A_PRICEDATA>
<A_MEDIADATA>
<A_MEDIA>https://1.jpg</A_MEDIA>
<A_MEDIA>https://2.jpg</A_MEDIA>
<A_MEDIA>https://3.jpg</A_MEDIA>
<A_MEDIA>https://4.jpg</A_MEDIA>
</A_MEDIADATA>
</ARTICLE>
<ARTICLE>
<A_PRICEDATA>
<A_PRICE>
<A_VK>40.95</A_VK>
</A_PRICE>
</A_PRICEDATA>
<A_MEDIADATA>
<A_MEDIA>https://11.jpg</A_MEDIA>
<A_MEDIA>https://22.jpg</A_MEDIA>
<A_MEDIA>https://33.jpg</A_MEDIA>
<A_MEDIA>https://44.jpg</A_MEDIA>
</A_MEDIADATA>
</ARTICLE>
</ARTICLEDATA>
</PRODUCT>
<PRODUCT>
<P_NAME>
<VALUE>Jeans</VALUE>
</P_NAME>
<ARTICLEDATA>  
<ARTICLE>
<A_PRICEDATA>
<A_PRICE>
<A_VK>29.95</A_VK>
</A_PRICE>
</A_PRICEDATA>
<A_MEDIADATA>
<A_MEDIA>https://111.jpg</A_MEDIA>
<A_MEDIA>https://222.jpg</A_MEDIA>
<A_MEDIA>https://333.jpg</A_MEDIA>
<A_MEDIA>https://444.jpg</A_MEDIA>
</A_MEDIADATA>
</ARTICLE>
<ARTICLE>
<A_PRICEDATA>
<A_PRICE>
<A_VK>19.95</A_VK>
</A_PRICE>
</A_PRICEDATA>
<A_MEDIADATA>
<A_MEDIA>https://1111.jpg</A_MEDIA>
<A_MEDIA>https://2222.jpg</A_MEDIA>
<A_MEDIA>https://3333.jpg</A_MEDIA>
<A_MEDIA>https://4444.jpg</A_MEDIA>
</A_MEDIADATA>
</ARTICLE>
</ARTICLEDATA>
</PRODUCT>
</PRODUCTDATA>
$xml = simplexml_load_file($datei);
foreach($xml->PRODUCTDATA->PRODUCT as $p)
{
$prod = (string) $p->P_NAME->VALUE;
$articles = "";
foreach ($p->ARTICLEDATA->ARTICLE as $article)
{
$price = (string)$article->A_PRICEDATA->A_PRICE->A_VK;
$firstImage = (string)$article->A_MEDIADATA->A_MEDIA;
$articles++;
}
}
$articles .= '<div class="photo"><img src="' . $firstImage . '" style="width: 120px margin:5px;"><div class="product-info mt__15"><h3 class="product-title pr fs__14 mg__0 fwm">' . $prod . '</h3><span class="price">€' . $price . ' EUR</span></div></div>';

as $p之前被定义为XMl中的父元素Product,其中包含许多文章。变量$ artiessless将被插入一个php长字符串,包含完整的HTML页面,所以这就是为什么我试图把它们一起在这个变量。

您不需要跟踪计数器和循环来判断它是否是第一个(索引0)条目。

假设文章的所有字段都存在,您可以使用SimpleXML,循环所有文章条目,并使用索引0获取价格(因为只有一个价格)和每个文章的第一个图像。

然后每个条目,您可以将带有变量的字符串附加到$articles

请注意,$produkt不存在于示例代码中,因此我仅为示例添加了一个硬编码值。

$articles = "";
foreach ($xml->ARTICLEDATA->ARTICLE as $article) {
$price = (string)$article->A_PRICEDATA->A_PRICE->A_VK;
$firstImage = (string)$article->A_MEDIADATA->A_MEDIA[0];
$produkt = "Product 1";
$articles .= '<div class="photo"><img src="' . $firstImage . '" style="width: 120px margin:5px;"><div class="product-info mt__15"><h3 class="product-title pr fs__14 mg__0 fwm">' . $produkt . '</h3><span class="price">€' . $price . ' EUR</span></div></div>';
}
echo $articles;

查看PHP演示

$m=0;
foreach($p->ARTICLEDATA->ARTICLE as $articless)
{
if($m==0)
{
$price = (string) $articless->A_PRICEDATA->A_PRICE->A_VK;
foreach($articless->A_MEDIADATA as $bild)
{
$firstImage = (string) $bild->A_MEDIA[2];
$articles .= '<div class="photo"><img src="' . $firstImage . '" style="width: 120px margin:5px;"><div class="product-info mt__15"><h3 class="product-title pr fs__14 mg__0 fwm">' . $prod . '</h3><span class="price">€' . $price . ' EUR</span></div></div>';
}
}
$m++;
}