Попытка найти конкретный узел в файле XML, который выглядит так:
<?xml version = "1.0" encoding = "utf-8"?>
<disqus xmlns = "http://disqus.com" xmlns:dsq = "http://disqus.com/disqus-internals"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://disqus.com/api/schemas/1.0/disqus.xsd http://disqus.com/api/schemas/1.0/disqus-internals.xsd">
<post dsq:id = "2248389859">
<id/>
<message><![CDATA[<p>Message</p>]]></message>
<createdAt>2015-09-11T17:08:10Z</createdAt>
<isDeleted>false</isDeleted>
<isSpam>false</isSpam>
<author>
<name>author</name>
<isAnonymous>false</isAnonymous>
<username>author</username>
</author>
<thread dsq:id = "3828540236"/>
<parent dsq:id = "2246284031"/>
</post>
</disqus>
Я хотел бы найти post с помощью метода SimpleXML#xpath, точнее, с помощью атрибута thread dsq:id. Но я даже не могу найти саму ветку с
$xml = simplexml_load_file("file.xml")
var_dump($xml->xpath('/disqus');
Это печатает пустой массив, но почему?






Я заржавел с правильной терминологией, но я думаю, что ваш запрос не работает, потому что ваш элемент объявляет пространство имен по умолчанию. Кажется, это работает, если вы зарегистрируете его с явным именем и используете его для запроса:.
$xml->registerXPathNamespace( 'disqus', 'http://disqus.com' );
$disqus = $xml->xpath( '/disqus:disqus' );
$post = $xml->xpath( '//disqus:post[disqus:thread/@dsq:id=3828540236]' );