xml — получает имя пространства имен в корневом элементе с помощью PHP SimpleXMLElement

Предположим, у меня есть следующий XML (это стандарт для ATOM)

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

<title>Example Feed</title>
<subtitle>A subtitle.</subtitle>
<link href="http://example.org/feed/" rel="self" />
<link href="http://example.org/" />
<id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
<updated>2003-12-13T18:30:02Z</updated>


<entry>
<title>Atom-Powered Robots Run Amok</title>
<link href="http://example.org/2003/12/13/atom03" />
<link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
<link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>Some text.</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>This is the entry content.</p>
</div>
</content>
<author>
<name>John Doe</name>
<email>[email protected]</email>
</author>
</entry>

</feed>

Также предположим, что приведенный выше XML находится на веб-странице, адрес которой http://www.example.com/atom.xml

Я знаю, что вы можете получить имя корневого элемента через следующий код:

// Using curl to access the page
$ch = curl_init('http://www.example.com/atom.xml');
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

$xml = new SimpleXmlElement($result);
$root = $xml->getName();
echo ($root)  // This prints "feed", which is the root element

Также я знаю, что следующий вызов получит все корневые пространства имен.

$xml->getNamespaces(true)

В нашем случае возвращаемое значение:

Array
(
[] => http://www.w3.org/2005/Atom
)

Тем не менее, мне очень нравится знать имя пространства имен. Другими словами, я не знаю, какую функцию вызывать, что возвращается XMLNS. Как мне узнать имя пространства имен? Мне нужно сделать некоторые проверки перед обработкой.

Пожалуйста, помогите, и спасибо.

1

Решение

«Тем не менее, мне действительно нравится знать имя пространства имен. Другими словами, я не знаю, какую функцию вызывать, что возвращается XMLNS«.

xmlns является синтаксисом XML для имени атрибута по умолчанию для объявления пространства имен. Не ясно, что вы пытаетесь проверить, но я думаю, что можно с уверенностью предположить, что если getNamespaces() возвращает пространство имен, префикс которого пуст, тогда исходный XML имеет допустимое пространство имен по умолчанию (другими словами, исходный XML имеет XMLNS).

Цитата из W3C «Пространства имен в XML«для удобства:

  1. Если имя атрибута совпадает DefaultAttNameзатем имя пространства имен в значении атрибута совпадает с именем пространства имен по умолчанию в области действия элемента, к которому присоединено объявление. В таком объявлении по умолчанию значение атрибута может быть пустым. Пространства имен по умолчанию и переопределение объявлений обсуждаются в «5. Применение пространств имен к элементам и атрибутам».
    [Пространство имен по умолчанию]

  2. [3] DefaultAttName :: = ‘xmlns’.
    [Имя атрибута по умолчанию]
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]