使用SimpleXML在PHP中基于兄弟节点的值选择文本节点

时间:2014-06-06 14:42:19

标签: php xml simplexml

我的XML格式与下面的格式相当:

<users>
  <user>
    <name>Mac</name>
    <category>4</category>
  </user>
  <user>
   <name>Simon</name>
    <category>3</category>
  </user>
  <user>
    <name>Jim</name>
    <category>4</category>
  </user>
</users>

我想要做的是与特定类别的用户进行交互并返回他们的名字。我一直在使用simplexml做一些工作,但我一直无法弄清楚如何根据它的兄弟中的文本选择元素节点。

foreach ($users->user as $user) {
echo (string)$user->name; 
}

提前谢谢

1 个答案:

答案 0 :(得分:1)

使用Xpath:

$users = simplexml_load_string($xml);
foreach($users->xpath('//user[category = 4]') as $user) {
  echo (string) $user->name, "\n";
}

输出:

Mac
Jim

btw 这就是DOM的外观:

$xpath = new DOMXpath(DOMDocument::loadXml($xml));
foreach ($xpath->evaluate('//user[category = 4]') as $user) {
  echo $xpath->evaluate('string(name)', $user), "\n";
}