Пока вы используете SimpleXml, вы не можете вернуть идентификатор напрямую.Правильный XPath будет
/Articles/Article[title="crack"]/@ID
, как уже показано в другом месте.Но SimpleXml не имеет понятия узлов атрибутов.Он знает только SimpleXmlElements.Таким образом, вы можете также получить узел Article вместо
/Articles/Article[title="crack"]
, потому что в конце вам придется все равно сделать следующее, чтобы получить значение идентификатора:
echo $articles[0]['id'];
Обратите внимание, чтовам не нужен символ @ при доступе к атрибуту из элемента SimpleXml.
Если вы хотите получить атрибут ID напрямую, вам придется использовать DOM ( codepad )
$dom = new DOMDocument;
$dom->loadXml($xml);
$xp = new DOMXPath($dom);
$id = $xp->evaluate('string(/Articles/Article[title="crack"]/@ID)');
var_dump($id);
Вышеприведенное вернет 1, если нет другого узла с элементом заголовка со значением, равным «crack».
Если у вас есть узлы с форматированием, каккак показано на скриншоте , вы должны очистить элемент перед проверкой значения.В противном случае пробел, используемый для форматирования документа, учитывается.XPath для этого будет
string(/Articles/Article[normalize-space(title) = "crack"]/@ID)
Если вы хотите искать статьи с заголовком, который содержит взломать частично, используйте
string(/Articles/Article[contains(title, "crack")]/@ID)
Примечаниечто это все равно будет возвращать только идентификатор сразу, пока есть только один результат.Если имеется несколько совпадающих узлов, будет возвращено первое значение идентификатора.Используйте
/Articles/Article[contains(title, "crack")]/@ID
, чтобы вернуть DOMNodeList всех соответствующих узлов, а затем выполнить итерацию по ним, чтобы получить их индивидуальные значения идентификатора.
Также см. основные примеры использования SimpleXml в PHPРуководство