首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xpath搜索php变量

xpath搜索php变量
EN

Stack Overflow用户
提问于 2012-06-29 00:51:52
回答 2查看 845关注 0票数 0

我尝试使用xpath在xml文件中搜索php变量,但失败得很糟糕。它使用硬编码的值工作,所以我就快到了..

代码语言:javascript
复制
<visitors>
 <detail>
  <id>876867</id>
  <name>Bob McHaggis</name>
  <email>bob@gmail.com</email>
 </detail>
 <detail>
  <id>897987</id>
  <name>Mark McBob</name>
  <email>mark@gmail.com</email>
 </detail>
</visitors>

<?php $sxe = simplexml_load_file("/CaptivePortal/visitors.xml");
      foreach($sxe->xpath('//visitors/detail') as $item){
       $row = simplexml_load_string($item->asXML());
       $v = $row->xpath('//id[. ="'.$_COOKIE["judsons"].'"]');
      } echo $v[0]; ?>

这对存储在cookie中的id进行了很好的检查。但是,根据找到的值,我如何访问匹配的键的名称和电子邮件?

找到并匹配: 897987我想回应的名称和电子邮件到,所以基于这是马克McBob & mark@gmail.com

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-29 02:55:29

我最初的建议是花几分钟时间(重新)通读一下手册中的页面。

对于选择XML文件中的单个项,根本不需要遍历任何内容。在熟悉了上面提到的页面之后,下面的示例代码以及为什么它与您的不同,应该会变得清晰。

代码语言:javascript
复制
<?php
$search_id = (int) $_COOKIE["judsons"];
$visitors  = simplexml_load_file("/CaptivePortal/visitors.xml");
$details   = $visitors->xpath("detail[id='$search_id']");

if (empty($details)) {
    echo "No details found for '$search_id'.";
} else {
    $detail = $details[0];
    $name   = (string) $detail->name;
    $email  = (string) $detail->email;
    echo "$name's email is $email";
}

上面的想法是,$details将是一个array,希望它只包含一个<detail>元素。如果没有找到具有指定<id><detail>,则它可能是一个空数组,这是if(empty(…))检查的内容。如果$details数组不为空,我们实际上只对第一个数组($details[0])感兴趣。

要访问<detail>中的可用信息,可以使用普通对象属性语法($detail->name)访问元素,如“基本用法”页面中所述。这样做会返回该项目的一个对象(例如<name>),因此为了获取字符串形式的值,该对象是使用(string)的。

票数 0
EN

Stack Overflow用户

发布于 2012-06-29 02:25:11

你实际上做了很多你不需要做的事情。首先,你不需要循环。另一方面,在循环中,将上下文XML转换为字符串(::asXML()),然后再将其转换回XML (simplexml_load_string())。

你所需要的是:

代码语言:javascript
复制
$xml = "<visitors><detail><id>876867</id><name>Bob McHaggis</name><email>bob@gmail.com</email></detail><detail><id>897987</id><name>Mark McBob</name><email>mark@gmail.com</email></detail></visitors>";
$sxe = simplexml_load_string($xml);
$row = $sxe->xpath('detail[id = '.$_COOKIE["judsons"].']');

这就给你带来了麻烦。要提取部分内容,请执行以下操作:

代码语言:javascript
复制
$name = $row[0]->xpath('name');
echo $name[0]; //Mark McBob
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11249376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档