Как вы запрашиваете пространства имен с PHP / XPath / DOM - PullRequest
4 голосов
/ 04 мая 2010

Я пытаюсь запросить документ XML, который использует пространства имен. У меня был успех с xpath без пространств имен, но без результатов с пространствами имен. Это основной пример того, что я пытался. Я немного сжал его, поэтому в моем образце могут быть небольшие проблемы, которые могут отвлечь от моей настоящей проблемы.

Пример XML:

<?xml version="1.0"?>
<sf:page>
     <sf:section>
          <sf:layout>
              <sf:p>My Content</sf:p>
          </sf:layout>
     </sf:section>
</sf:page>

Пример PHP-кода:

<?php
$path = "index.xml";

$content = file_get_contents($path);

$dom = new DOMDocument($content);

$xpath = new DOMXPath($dom);
$xpath->registerNamespace('sf', "http://developer.apple.com/namespaces/sf");

$p = $xpath->query("//sf:p", $dom);

Мой результат таков, что "p" является "DOMNodeList Object ()", а его длина равна 0. Любая помощь будет принята.

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

Конструктор DOMDocument принимает не содержимое, а версию и кодировку. Вместо:

$path = "index.xml";
$content = file_get_contents($path);
$dom = new DOMDocument($content);

Попробуйте это:

$path = "index.xml";
$doc = new DOMDocument();
$doc->load($path);
0 голосов
/ 11 июня 2010

Вы должны определить пространство имен в своем XML-файле:

<?xml version="1.0"?>
<root xmlns:sf="http://developer.apple.com/namespaces/sf">
    <sf:page>
         <sf:section>
              <sf:layout>
                  <sf:p>My Content</sf:p>
              </sf:layout>
         </sf:section>
    </sf:page>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...