Я пытаюсь в PHP добавить дополнительное пространство имен к элементу <gpx> XML-файла.Это существующий элемент <gpx> (обратите внимание, что пространство имен "stunninghikes" не включено):
<gpx>
<?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&#252;el - Vorderh&#246;hi - Gulmen (1788m) - Hinter H&#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>.
xmlns:stunninghikes="https://stunninghikes.com/GPX/1/0"
Я пробовал множество вариантов использования createAttributeNS и setAttributeNS, но НЕ МОЖЕТ заставить его работать!Это один из примеров того, что я пробовал:
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);
Есть идеи?
Вы были довольно близки с вашей попыткой. Вам не разрешено вручную изменять атрибуты xmlns документа, вместо этого вы получите DOMException жалобу на «Ошибка пространства имен».
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&#252;el - Vorderh&#246;hi - Gulmen (1788m) - Hinter H&#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>