PHP SimpleXMLElement - начальное объявление и пространства имен - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь повторить эту структуру 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">

Это p: пространство имен и связанный с ним атрибут 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>');

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

1 Ответ

0 голосов
/ 20 октября 2018

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 делает это точно.

Источник

...