【问题标题】:Parsing and displaying data from an xml [duplicate]解析和显示来自 xml 的数据 [重复]
【发布时间】:2013-04-15 10:18:58
【问题描述】:
您好,我有一个在线商家的 xml 目录,我的问题是:如何使用 php 正确显示此文件的结果,我试图获得一些结果,但我不知道如何正确显示图像或特定图像(默认,小或中..)和网址。谢谢,我是 php 新手。
<?xml version="1.0" encoding="UTF-8"?>
<catalog id="[Identifiant du programme]">
<products>
<product>
<product_id>
<ean>["European Article Numbering" du produit]</ean>
<store>[Reference produit du marchand]</store>
<manufacturer>[Reference produit du fabricant]</manufacturer>
</product_id>
<trademark>[Marque du produit]</trademark>
<title>[Nom du produit]</title>
<desc>[Description du produit]</desc>
<full_desc>[Description élargie du produit]</full_desc>
<url>[Lien de redirection tracké Public-Idées du produit]</url>
<other>[Informations complémentaires sur le produit]</other>
<product_images>
<image type="default">[Lien vers l'image par défaut du produit]</image>
<image type="small">[Lien vers l'image de petite taille du produit]</image>
<image type="medium">[Lien vers l'image de taille moyenne du produit]</image>
<image type="large">[Lien vers l'image de grande taille du produit]</image>
</product_images>
<price currency="[Unité monétaire utilisée du prix du produit]">[Prix du produit]</price>
<tax>
<name>[Nom de la taxe associée au produit]</name>
<price currency="[Unité monétaire de la taxe du produit]">[Montant de la taxe associée au produit]</price>
</tax>
<shipping>
<delivery>[Texte associé aux frais de port du produit]</delivery>
<price currency="[Unité monétaire des frais de port]">[Montant des frais de port du produit]</price>
</shipping>
<category>
<merchant>
<name>[Catégorie du marchand associée au produit]</name>
<id>[Identifiant de la catégorie du marchand associée au produit]</id>
</merchant>
</category>
</product>
</products>
【问题讨论】:
标签:
php
mysql
xml
xslt
xml-parsing
【解决方案1】:
PHP 为您提供了两个最推荐的库来执行此操作 (there are more, both built-in as well as external ones)。一个是SimpleXML,另一个是DOMDocument。两者都对 XML 进行操作,这里仅举两个示例,每个示例一个。详情请查阅在线文档:
$images = $simpleXMLElement->xpath('//image');
printf("Found %d image(s):\n", count($images));
foreach($images as $i => $image) {
printf(" * %d. %s\n", $i+1, $image);
}
/**** output:
Found 4 image(s):
* 1. [Lien vers l'image par défaut du produit]
* 2. [Lien vers l'image de petite taille du produit]
* 3. [Lien vers l'image de taille moyenne du produit]
* 4. [Lien vers l'image de grande taille du produit]
DOMDocument 的第二个例子:
$images = $domDocument->getElementsByTagName('image');
printf("Found %d image(s):\n", $images->length);
foreach($images as $i => $image) {
printf(" * %d. %s\n", $i+1, $image->nodeValue);
}
/**** output:
Found 4 image(s):
* 1. [Lien vers l'image par défaut du produit]
* 2. [Lien vers l'image de petite taille du produit]
* 3. [Lien vers l'image de taille moyenne du produit]
* 4. [Lien vers l'image de grande taille du produit]
您选择哪个库取决于您。我建议你尝试两者。 DOMDocument 遵循使其易于使用的标准,而 SimpleXMLElement 则不这样做,并且尽量不那么冗长,但是您需要了解更多才能充分利用它。
如果您的问题与 XML 无关,而只是与如何链接/显示图像有关,那么您需要指定图像的限定条件以及您提供的数据的方式。到目前为止,我只看到方括号中的法语描述;)
【解决方案2】:
工作示例:您的 xml 不完整:缺少目录结束标记,所以我添加它:
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<catalog id="[Identifiant du programme]">
<products>
<product>
<product_id>
<ean>["European Article Numbering" du produit]</ean>
<store>[Reference produit du marchand]</store>
<manufacturer>[Reference produit du fabricant]</manufacturer>
</product_id>
<trademark>[Marque du produit]</trademark>
<title>[Nom du produit]</title>
<desc>[Description du produit]</desc>
<full_desc>[Description élargie du produit]</full_desc>
<url>[Lien de redirection tracké Public-Idées du produit]</url>
<other>[Informations complémentaires sur le produit]</other>
<product_images>
<image type="default">[Lien vers l\'image par défaut du produit]</image>
<image type="small">[Lien vers l\'image de petite taille du produit]</image>
<image type="medium">[Lien vers l\'image de taille moyenne du produit]</image>
<image type="large">[Lien vers l\'image de grande taille du produit]</image>
</product_images>
<price currency="[Unité monétaire utilisée du prix du produit]">[Prix du produit]</price>
<tax>
<name>[Nom de la taxe associée au produit]</name>
<price currency="[Unité monétaire de la taxe du produit]">[Montant de la taxe associée au produit]</price>
</tax>
<shipping>
<delivery>[Texte associé aux frais de port du produit]</delivery>
<price currency="[Unité monétaire des frais de port]">[Montant des frais de port du produit]</price>
</shipping>
<category>
<merchant>
<name>[Catégorie du marchand associée au produit]</name>
<id>[Identifiant de la catégorie du marchand associée au produit]</id>
</merchant>
</category>
</product>
</products>
</catalog>';
$dom = simplexml_load_string($xml);
$producs = $dom->products->product;
foreach($producs as $product){
echo('ean:' . (string)$product->product_id->ean);
echo('<br />');
$images = $product->product_images->image;
foreach($images as $img){
echo('type:' . (string)$img['type'] . ' value:' . (string)$img);
echo('<br />');
}
}