向XML文件添加其他命名空间



我正在PHP中尝试向XML文件的<gpx>元素添加一个额外的命名空间。这是现有的<gpx>元素(请注意,名称空间"stunningraips"不包括在内(:

<?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>元素中。

我已经尝试了许多使用createAttributeNSsetAttributeNS的选项,但无法使其工作!这是我尝试过的一个例子:

$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

您可以做的是创建一个属性(任何属性(,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>

最新更新