Добавить дополнительное пространство имен в файл XML - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь в PHP добавить дополнительное пространство имен к элементу <gpx> XML-файла.Это существующий элемент <gpx> (обратите внимание, что пространство имен "stunninghikes" не включено):

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" 
    xmlns:gpsies="https://www.gpsies.com/GPX/1/0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    creator="GPSies https://www.gpsies.com - Amden - Chapf (1296m) - Arvenb&amp;#252;el - Vorderh&amp;#246;hi - Gulmen (1788m) - Hinter H&amp;#246;hi - Niederschlag" 
    version="1.1" 
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd https://www.gpsies.com/GPX/1/0 https://www.gpsies.com/gpsies.xsd">
    <content>
    (Lots more content)
    </content>
</gpx>

Мне бы хотелось, чтобы атрибут xmlns:stunninghikes="https://stunninghikes.com/GPX/1/0" был добавлен к элементу <gpx>.

Я пробовал множество вариантов использования createAttributeNS и setAttributeNS, но НЕ МОЖЕТ заставить его работать!Это один из примеров того, что я пробовал:

$gpxDoc = new DomDocument;
$gpxDoc->load($gpxFileName);
$gpxNode = $gpxDoc->getElementsByTagName('gpx'); 
$gpxNode->createAttributeNS('https://stunninghikes.com/GPX/1/0', 'xmlns:stunninghikes');
$gpxDoc->appendChild($gpxNode);

Есть идеи?

1 Ответ

0 голосов
/ 14 ноября 2018

Вы были довольно близки с вашей попыткой. Вам не разрешено вручную изменять атрибуты xmlns документа, вместо этого вы получите DOMException жалобу на «Ошибка пространства имен».

Что вы можете сделать, это создать атрибут (любой атрибут), и документ XML будет автоматически обновлен, чтобы включить пространство имен, даже если вы не добавляете его в документ:

$gpxDoc = new DomDocument;
$gpxDoc->load($gpxFileName);
$gpxDoc->createAttributeNS('https://stunninghikes.com/GPX/1/0', 'stunninghikes:dummy');
echo $gpxDoc->saveXML();

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpsies="https://www.gpsies.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stunninghikes="https://stunninghikes.com/GPX/1/0" creator="GPSies https://www.gpsies.com - Amden - Chapf (1296m) - Arvenb&amp;#252;el - Vorderh&amp;#246;hi - Gulmen (1788m) - Hinter H&amp;#246;hi - Niederschlag" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd https://www.gpsies.com/GPX/1/0 https://www.gpsies.com/gpsies.xsd">

    <content>
    (Lots more content)
    </content>
</gpx>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...