使用PHP查询XML文件的值

时间:2019-06-06 16:06:27

标签: php xml

我当前正在从事一个项目,该项目需要我查询php之类的XML文件以返回与请求匹配的值。看看XML:

<ENVELOPE>
 <MASTER>
  <STKDETNAME>004-011</STKDETNAME>
  <STKPNO>PTN771</STKPNO>
  <STKPRICE></STKPRICE>
  <STKOPBAL>500</STKOPBAL>
 </MASTER>
 <MASTER>
  <STKDETNAME>004-012</STKDETNAME>
  <STKPNO>PTN772</STKPNO>
  <STKPRICE></STKPRICE>
  <STKOPBAL>500</STKOPBAL>
 </MASTER>
 <MASTER>
  <STKDETNAME>004-013</STKDETNAME>
  <STKPNO>PTN773</STKPNO>
  <STKPRICE></STKPRICE>
  <STKOPBAL>1000</STKOPBAL>
 </MASTER>
 <MASTER>
  <STKDETNAME>004-014</STKDETNAME>
  <STKPNO>PTN774</STKPNO>
  <STKPRICE></STKPRICE>
  <STKOPBAL>1000</STKOPBAL>
 </MASTER>
 <MASTER>
  <STKDETNAME>004-015</STKDETNAME>
  <STKPNO>PTN775</STKPNO>
  <STKPRICE>400</STKPRICE>
  <STKOPBAL>1000</STKOPBAL>
 </MASTER>
</ENVELOPE>

现在,我想获取SKTPNO = PTN773的STKPRICE和STKOPBAL。这是我到目前为止所看到的,但是我不知道如何获得这两个值。我刚接触XML。

 $file = 'stocksum.xml';//same file as above
     $xmlfile = simplexml_load_file($file);
     $partno = PTN775;
     $fnd = $xmlfile->xpath('/ENVELOPE/MASTER/STKPNO[.="$partno"]');

1 个答案:

答案 0 :(得分:1)

代码中有几个问题,只是语法问题,这些是零件号,不需要引号;在构建XPath表达式时,您使用单引号,这样就不会插入实际的零件号。

但是要解决您的实际问题,如果将XPath更改为此处使用的那个,则会找到<MASTER>元素,其<STKPNO>是您所追求的。因此,您可以使用标准SimpleXML对象表示法将<MASTER>元素与元素一起使用...

$partno = 'PTN775';
$fnd = $xmlfile->xpath('/ENVELOPE/MASTER[STKPNO="'.$partno.'"]');

echo $fnd[0]->STKPRICE.PHP_EOL;

请注意,当xpath()返回匹配列表时,我使用$fnd[0]来获取第一个匹配项。

还可以检查零件是否确实存在的代码...

$xmlfile = simplexml_load_file($file);

$partno = 'PTN7751';
$fnd = $xmlfile->xpath('/ENVELOPE/MASTER[STKPNO="'.$partno.'"]');

if ( count($fnd) == 0 ) {
    echo "Not found";
}
else    {
    echo $fnd[0]->STKPRICE.PHP_EOL;
}