xpath找不到任何东西 - PHP

时间:2015-07-27 09:30:35

标签: php xml xpath

简介

我在SQL中有一些代码。我在php中的while循环中按代码进行代码,并在XML feed中搜索这些代码。

程序代码

我有以下程序代码

$x_search = $xml->xpath("//Item[@Sort='$sort']");
if(!$x_search){
    $x_Id = $x_search[0]->attributes()->Id;
    echo $sort." - ".$x_Id."<BR />";
}

问题

有些代码可能不在SQL中。所以我收到此错误消息:

Undefined offset: 0 in

如果你在XML中找到它,如何做,$ x_Id = $ x_search [0] - &gt; attributes() - &gt; Id;?

我已经尝试过了:

  1. $ x_search = $ xml-&gt; xpath(&#34; // * [@ Sort =&#39; $ sort&#39;]&#34;);
  2. 如果(!空($ x_search)){
  3. 如果(isset($ x_search)){
  4. 示例XML:

    <?xml version="1.0" encoding="utf-8"?>
    <Root>
      <Item Id="12860" IdP="-2147483648" Sort="0001KC" Name="Computers">
        <StoItem />
      </Item>
    </Root>
    

    $sort的示例:

    00004M
    12860
    12859
    12859
    12861
    12861
    12862
    12862
    12863
    12863
    12864
    

    谢谢

2 个答案:

答案 0 :(得分:0)

这是XML的一个例子。我写的有可能,有些代码不在SQL中。这就是我需要解决这个问题的原因。只有当你在XML中找到这种类型时才会给我写一个回音。

<?xml version="1.0" encoding="utf-8"?>
<Root>
<Item Id="12860" IdP="-2147483648" Sort="0001KC" Name="Computers">
    <StoItem />
</Item>
</Root>

输入不变$ sort

的代码列表的开头
00004M
12860
12859
12859
12861
12861
12862
12862
12863
12863
12864

答案 1 :(得分:0)

SimpleXMLElement::xpath()始终返回SimpleXMLElement个对象的数组。如果没有匹配,则数组为空。如果表达式无效(编程错误),结果可能等于false。因此,if (!empty($x_search)) ...if ($x_search) ...可用作检查结果的条件。 false是空值,空数组等于false。如果表达式的结果是至少包含单个元素的数组,则两个条件都只是true

$xmlString = <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Id="12860" IdP="-2147483648" Sort="0001KC" Name="Computers">
    <StoItem />
  </Item>
</Root>
XML;

$xml = new SimpleXmlElement($xmlString);
$sort = '0001KC';

$x_search = $xml->xpath("//Item[@Sort='$sort']");
if (!empty($x_search)) {
    $x_Id = $x_search[0]->attributes()->Id;
    echo $sort." - ".$x_Id."<BR />";
}

输出:https://eval.in/406640

0001KC - 12860<BR />

$sort的大多数示例值看起来都像Id属性值。第二个是示例XML中的Id属性值。

如果要匹配Id属性,则Xpath表达式为:

//Item[@Id='$sort']

甚至可以匹配这两个属性:

//Item[@Id='$sort' or @Sort='$sort']