Предположим, у меня есть следующий 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. Как мне узнать имя пространства имен? Мне нужно сделать некоторые проверки перед обработкой.
Пожалуйста, помогите, и спасибо.
«Тем не менее, мне действительно нравится знать имя пространства имен. Другими словами, я не знаю, какую функцию вызывать, что возвращается XMLNS«.
xmlns
является синтаксисом XML для имени атрибута по умолчанию для объявления пространства имен. Не ясно, что вы пытаетесь проверить, но я думаю, что можно с уверенностью предположить, что если getNamespaces()
возвращает пространство имен, префикс которого пуст, тогда исходный XML имеет допустимое пространство имен по умолчанию (другими словами, исходный XML имеет XMLNS).
Цитата из W3C «Пространства имен в XML«для удобства:
Если имя атрибута совпадает
DefaultAttName
затем имя пространства имен в значении атрибута совпадает с именем пространства имен по умолчанию в области действия элемента, к которому присоединено объявление. В таком объявлении по умолчанию значение атрибута может быть пустым. Пространства имен по умолчанию и переопределение объявлений обсуждаются в «5. Применение пространств имен к элементам и атрибутам».
[Пространство имен по умолчанию]
[3]DefaultAttName
:: = ‘xmlns’.
[Имя атрибута по умолчанию]
Других решений пока нет …