解析具有相同标记名称的XML页面

时间:2014-01-14 03:04:22

标签: php xml simplexml

刚开始使用SimpleXML并遇到问题

我能够解析简单的xml页面,如下所示

<something>
 <something2> value1 </something2>
 <something3> value2 </something3>
  </something>

获得something2和something3的值非常简单如果这是我唯一需要的东西

但是我遇到了具有多个标记实例的XML文件的问题,例如

     <car>
       <carID>001</carID>
         <carTyre>4</carTyre>
          <carColor>Red</carColor>
            <carName>Bruce</carName>
    </car>
   <car>
     <carID>002</carID>
        <carTyre>4</carTyre>
          <carColor>Blue</carColor>
            <carName>Tom</carName>
     </car>
     <car>
          <carID>003</carID>
            <carTyre>4</carTyre>
              <carColor>Yellow</carColor>
                 <carName>Alex</carName>
   </car>
   <car>
     <carID>004</carID>
         <carTyre>4</carTyre>
            <carColor>White</carColor>
              <carName>Tina</carName>
          </car>

如果我只想要特定信息(不是整个数据集),例如

蒂娜 - 怀特 Tome - Blue

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

让我们说这些都在Cars.xml中,然后你可以尝试这样的事情:

<?php 
 $cars =  simplexml_load_file("Cars.XML"); 
 foreach($cars->xpath('//car') as $car) { 

$row = simplexml_load_string($car->asXML()); 
$v = $row->xpath('//carID[. ="004"]'); 
if($v[0]){ 
    print $car-> carName . '-' . $car-> carColor; 
 } 

} 
?>

答案 1 :(得分:0)

您还可以创建类似//car[carID[text()="001"]]的xpath。这将为您提供carID为001的整个xml结构。您可以将ID更改为任何其他ID。如果你想要这个父节点下的所有细节你可以使用这样的东西//car[carID[text()="001"]]/carTyre这将为你提供id为001的节点carTyre。希望这会有所帮助。