使用包含多个信息的标记解析xml

时间:2013-04-09 16:20:00

标签: php xml-parsing

我有像这样的xml

<catalogo>
<items>
<item>
<ID>1</ID>
<NAME>VA</NAME>
<SIZE>S</SIZE>
<GROUP>1,2,3,4</GROUP>
</item>
<item>
<ID>2</ID>
<NAME>VA</NAME>
<SIZE>M</SIZE>
<GROUP>l,2,3,4</GROUP>
</item>
<item>
<ID>3</ID>
<NAME>VA</NAME>
<SIZE>L</SIZE>
<GROUP>1,2,3,4</GROUP>
</item>
<item>
<ID>2</ID>
<NAME>VA</NAME>
<SIZE>XL</SIZE>
<GROUP>l,2,3,4</GROUP>
</item>
</items>
</catalogo>

TAG GROUP它指的是同一产品的所有ID,但TAG SIZE的值不同。

我想获得像这样的SQL表

  id name size1 size2 size3 size4
   1   va   s      m     l     xl

如何用php解析这个xml以获得我想要的表?

1 个答案:

答案 0 :(得分:0)

假设您获得了XML并且无法更改它:

(1)读取XML,构建数组$c,假设<NAME><SIZE>s链接。
代码将生成一个关联数组,其中key = <NAME>和value = <SIZE>s由|:["VA"] => string(9) "|S|M|L|XL"分隔

$xml = simplexml_load_string($x);
$c = array();

foreach ($xml->items->item as $item) {

 $n = (string)$item->NAME;
 if (!isset($c[$n])) $c[$n]='';
 $c[$n] .= "|". (string)$item->SIZE;

}

(2)将$c写入表(数据库表?,HTML表?你决定......):

foreach ($c as $name => $sizes) {

    $size = explode('|', trim($sizes,'|'));
$max = count($size);
// enter code for whatsoever table...
    // echo for demonstration:
    echo "--$name:-----<br />";
for ($i = 0; $i < $max; $i++) echo "size$i: {$size[$i]}<br />";

} 

查看live-demo:http://codepad.viper-7.com/VL1hgw

如果您自己制作 XML,请将其设置为 ,例如......

<item id="1">
    <name>VA</name>
    <size>S</size>
    <size>M</size>
    <size>L</size>
    <size>XL</size>
</item>