【问题标题】:xpath finds nothing - PHPxpath 什么也没找到 - PHP
【发布时间】:2015-07-27 09:30:35
【问题描述】:

简介

我有一些 SQL 代码。我在 php 的 while 循环中逐个代码,并在 XML 提要中搜索这些代码。

程序代码

我有以下程序代码

$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]->attributes()->Id; 之类的怎么办?

我已经试过了:

  1. $x_search = $xml->xpath("//*[@Sort='$sort']");
  2. if(!empty($x_search)){
  3. if(isset($x_search)){

示例 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

谢谢

【问题讨论】:

  • 您需要在问题中包含 XML 和 $sort 变量的值。消息说你有一个空数组,你的 Xpath 表达式不匹配任何元素节点。
  • @ThW 我不明白你的意思。可以举个例子吗?
  • 不,我不能,您的问题是缺少 XML 和部分表达式。我不知道你在哪个 XML 上使用了哪个表达式。
  • @ThW XML 在我的问题下方。
  • @ThW 而 $sort 是 SQL 中包含代码的变量。我需要从 SQL 中获取代码,在 XML 中找到它并从这个 XML 中给我一个 Id。问题是 $sort 是否包含不在 XML 中的代码。我需要解决这种情况。

标签: php xml xpath


【解决方案1】:

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']

【讨论】:

  • 试试这个链接,它是一个工作示例。我想 OP 在$sort 中具有不同的值,与属性不匹配,因此结果为空。仍然!empty() 可以避免访问无效的数组元素。
  • 是的,但是如果 $sort 是例如 00004M 并且它不在 XML 中,该怎么办。我需要解决这个问题。因为只有在 XML 中找到此代码时,我才需要编写此输出。如果此代码不在 XML 中,请忽略它。
  • xpath 失败时返回 false。所以你的代码并不比OP的代码好。说,那个排序有不正确的数据,你可以在 connent
  • 不,只有带有损坏的 Xpath 表达式 SimpleXMLElement::xpath() 才会返回 false。如果它没有成功匹配节点,它将返回一个空数组。 eval.in/406656
【解决方案2】:

这是 XML 的一个示例。 A 我写的可能是某些代码不在 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

【讨论】:

  • 但这是 id 的值,但第一个
猜你喜欢
  • 2011-12-18
  • 2018-09-12
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2010-12-27
  • 2014-11-13
  • 2021-06-28
  • 2017-09-03
相关资源
最近更新 更多