Найти узел через xpath в SimpleXML

Попытка найти конкретный узел в файле 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');

Это печатает пустой массив, но почему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я заржавел с правильной терминологией, но я думаю, что ваш запрос не работает, потому что ваш элемент объявляет пространство имен по умолчанию. Кажется, это работает, если вы зарегистрируете его с явным именем и используете его для запроса:.

$xml->registerXPathNamespace( 'disqus', 'http://disqus.com' );

$disqus = $xml->xpath( '/disqus:disqus' );
$post   = $xml->xpath( '//disqus:post[disqus:thread/@dsq:id=3828540236]' );

Другие вопросы по теме