В настоящее время я пытаюсь прочитать различные файлы install.rdf расширений Firefox через PHP SimpleXML.
К сожалению, нет предопределенной структуры, как они должны выглядеть.Они всегда используют два пространства имен: «http://www.w3.org/1999/02/22-rdf-syntax-ns#"» и «http://www.mozilla.org/2004/em-rdf#".
». Поэтому я хотел использовать XPath для получения элементов, представляющих интерес:
$xml = simplexml_load_string($installRDF);
$namespaces = $xml->getNameSpaces(true);
$xml->registerXPathNamespace('rdf', NS_RDF);
$main = $xml->xpath('/rdf:RDF/rdf:Description[@rdf:about="urn:mozilla:install-manifest"]');
НоКажется, существует проблема с префиксом rdf
атрибута about
, поскольку он просто возвращает результат, если в файле RDF также определен префикс.
Так что для этого он работает:
<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<RDF:Description RDF:about="urn:mozilla:install-manifest">
<em:id>extension@mozilla.org</em:id>
</RDF:Description>
</RDF:RDF>
Но для этого нет:
<RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Description about="urn:mozilla:install-manifest">
<em:id>extension@mozilla.org</em:id>
</Description>
</RDF>
Для меня это выглядит как ошибка в PHP, поскольку, если я удаляю атрибут из XPath, я всегда получаю элементы Description
,Но я еще не знаю об использовании пространств имен в XPath, поэтому я спрашиваю здесь.