0

我是 PHP/开发新手,我一直无法找到解决此特定问题的教程。

我有一个来自 API 的 XML 文件,其中包含在线商店的产品信息。每个实物产品都有多个“样式”,需要在同一页面上列出。我想使用他们的身份证号码来做到这一点。

这是我的提要的简化版本:

<products>
  <product id="001">
    <name>Shirt 1 - Women's</name>
    <price>12.00</price>
    <color>blue</color>
  </product>

  <product id="002">
    <name>Shirt 1 - Men's</name>
    <price>12.00</price>
    <color>red</color>
  </product>
   ...
  <product id="023">
    <name>Shirt 12 - Women's</name>
    <price>15.00</price>
    <color>purple</color>
  </product>

  <product id="024">
    <name>Shirt 12 - Men's</name>
    <price>15.00</price>
    <color>yellow</color>
  </product>

</products>

等等shirt12.php,我只需要从<product id="023">和获取信息<product id="024">因为这些包含我的“衬衫 12”样式的信息。

使用 simplexml 我可以<product>使用以下代码获取一个数据:

foreach ($products->product as $product) {
if ($product['id'] == '024') { 
  //display data using some code
  }
}

我不知道我会怎么做这两个或两个以上。如果可以使用 simplexml 完成,那就太好了,因为我最熟悉它。但是如果我需要使用不同的 XML 解析方法,我也愿意,但是它需要与 wordpress 兼容。

4

3 回答 3

1

使用XPath可以让事情变得更容易:

$xml=simplexml_load_string(<<<XML
<products>
  <product id="001">
    <name>Shirt 1 - Women's</name>
    <price>12.00</price>
    <color>blue</color>
  </product>

  <product id="002">
    <name>Shirt 1 - Men's</name>
    <price>12.00</price>
    <color>red</color>
  </product>
  <product id="023">
    <name>Shirt 12 - Women's</name>
    <price>15.00</price>
    <color>purple</color>
  </product>

  <product id="024">
    <name>Shirt 12 - Men's</name>
    <price>15.00</price>
    <color>yellow</color>
  </product>

</products>
XML
);
foreach($xml->xpath('//product[starts-with(name/text(),"Shirt 12")]') as $product)
{
    echo $product->name;
    echo "\n";
    echo $product->price;
    echo "\n";
    echo $product->color;
    echo "\n\n";
}

在线演示

更新

如果您需要按 id 获取,只需更改 XPath:

foreach($xml->xpath('//product[@id="023" or @id="024"]') as $product)

在线演示,还演示了如何获取 ID 属性。

于 2013-05-24T09:54:53.183 回答
1

有很多方法可以解决这个问题,其中之一是您可以使用该in_array()函数来测试多个 id 值:

$ids = array('023', '024');

foreach ($product->product as $product) {
    if (in_array($product['id'], $ids)) { 
        //display data using some code
    }
}

另请参阅相关问题:PHP If Statement with Multiple Conditions

我选择了那个,因为您也可以在其他情况下使用它,并且还表明您的问题与 XML 无关,而更多地与 PHP 本身有关。

我希望它对你有帮助。

于 2013-05-24T10:12:03.257 回答
0

你的意思是这样吗?

foreach ($product->product as $product) {
if ($product['id'] == '023'||$product['id'] == '024') { 
  //display data using some code
  }
}

另外,不确定为什么每个 id 都有不同的 php 页面,如果它是产品页面,它应该是动态的,所以

shirt.php?id=12 
于 2013-05-24T10:36:30.660 回答