Найти, есть ли у узла родные братья, используя simplexml - PullRequest
4 голосов
/ 01 февраля 2010

Я пытаюсь выяснить, есть ли у определенного узла родные братья, и если это так, я хотел бы знать, каковы эти родные братья.

Возможно ли это?

Ответы [ 3 ]

8 голосов
/ 01 февраля 2010

Чтобы выбрать братьев и сестер узла, вы должны использовать соответствующий XPath-топор. Вот как можно выбрать всех братьев и сестер узла (игнорируя сам узел)

$siblings = $node->xpath('preceding-sibling::* | following-sibling::*');

Это все, что тебе нужно сделать.

1 голос
/ 01 февраля 2010

Я думаю, что использование xpath - ваш лучший выбор здесь:

<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
 <title>Forty What?</title>
 <from>Joe</from>
 <to>Jane</to>
 <body>
  I know that's the answer -- but what's the question?
 </body>
</document>
XML;

function get_all_siblings(SimpleXMLElement $node)
{
  return $node->xpath('preceding-sibling::* | following-sibling::*');
}

$xml = simplexml_load_string($string);

foreach (get_all_siblings($xml->to) as $e)
  echo $e->getName()."\n";    
?>

Результат:

title
from
body
0 голосов
/ 01 февраля 2010
$xml = new SimpleXMLElement($xmlstr);
$xmlNode = $xml->xpath('root/yourNodeName');
$nodeCount = count($xmlNode); 

Не уверен, что это все еще полезно для вас

...