PHP SimpleXMLElement - Начальное объявление и пространства имен

Я пытаюсь воспроизвести эту XML-структуру. Единственное, с чем я не могу справиться, - это первоначальное объявление. Процитирую самую важную часть.

<p:FatturaElettronica versione = "FPA12" xsi:schemaLocation = "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">

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

<?xml version = "1.0" encoding = "UTF-8"?>
<p:FatturaElettronica versione = "FPA12" xmlns:ds = "http://www.w3.org/2000/09/xmldsig#" 
xmlns:p = "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" 
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation = "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">

Есть пространство имен п: и связанный атрибут xmlns: p, и я понятия не имею, как мне реализовать его в моем сценарии PHP SimpleXMLElement.

Уже 2 дня я играю с пространствами имен в addChild и addAttribute и читаю учебники безуспешно. Я сдаюсь. Я вернул все изменения в следующее заявление, которое явно неверно.

$xml = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><FatturaElettronica versione = "FPA12" xmlns:ds = "http://www.w3.org/2000/09/xmldsig#" xmlns:p = "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"></FatturaElettronica>');

Как, черт возьми, это работает? Я никогда так не застревал. Спасибо за уделенное время.

Стоит ли изучать 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 и хотите разрабатывать...
0
0
244
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

SimpleXML имеет необычную причуду, в которой префиксы пространства имен отфильтровываются из корневого элемента. Я не уверен, почему он это делает.

Однако обходной путь, который я использовал, заключался в том, чтобы в основном префикс префикса, так что синтаксический анализатор удаляет только первые и оставляет второй

$xmlTest = new SimpleXMLElement('<xmlns:ws:Test></xmlns:ws:Test>', LIBXML_NOERROR, false, 'ws', true);
$xmlTest->addAttribute('xmlns:xmlns:ws', 'http://url.to.namespace');
$xmlTest->addAttribute('xmlns:xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');

Мне кажется, это работает, хотя мне интересно понять, почему SimpleXML делает именно это.

Источник

Спасибо, Эшли! Теперь я вспоминаю, что несколько месяцев назад у меня была такая же проблема при работе с XML-файлами Sitemap. Честно говоря, я не понимаю, почему мне нужно ставить префикс перед префиксом: - | SimpleXML такой странный. Еще раз спасибо за ваше время!

user1274113 20.10.2018 14:11

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