使用SimpleXML更改文本节点的值使用SimpleXML更改文本节点的值
问题描述:
我正在尝试编写代码,它将在XML文件中查找特定元素,然后更改文本节点的值。 XML文件具有不同的名称空间。到目前为止,我已经设法注册名称空间,并且还回显了我想要更改的元素的文本节点。使用SimpleXML更改文本节点的值使用SimpleXML更改文本节点的值
<?php
$xml = simplexml_load_file('getobs.xml');
$xml->registerXPathNamespace('g','http://www.opengis.net/gml');
$result = $xml->xpath('//g:beginPosition');
foreach ($result as $title) {
echo $title . "\n";
}
?>
我的问题是:如何使用SimpleXML更改此元素的值?我试图使用nodeValue命令,但我无法使其工作。
这是XML的一部分:
<sos:GetObservation xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" service="SOS" version="1.0.0" srsName="urn:ogc:def:crs:EPSG:4326">
<sos:offering>urn:gfz:cawa:def:offering:meteorology</sos:offering>
<sos:eventTime>
<ogc:TM_During xmlns:ogc="http://www.opengis.net/ogc" xsi:type="ogc:BinaryTemporalOpType">
<ogc:PropertyName>urn:ogc:data:time:iso8601</ogc:PropertyName>
<gml:TimePeriod xmlns:gml="http://www.opengis.net/gml">
<gml:beginPosition>2011-02-10T01:10:00.000</gml:beginPosition>
感谢 季米特里斯
答
最后,我成功地做到这一点,通过使用PHP XML DOM。 下面是我为了用来改变特定元素的文本节点的编码:
<?php
// create new DOM document and load the data
$dom = new DOMDocument;
$dom->load('getobs.xml');
//var_dump($dom);
// Create new xpath and register the namespace
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('g','http://www.opengis.net/gml');
// query the result amd change the value to the new date
$result = $xpath->query("//g:beginPosition");
$result->item(0)->nodeValue = 'sds';
// save the values in a new xml
file_put_contents('test.xml',$dom->saveXML());
?>
答
不希望从我已经为SimpleXML的发码开关,我发现这个解决方案:
http://www.dotdragnet.com/forum/index.php?topic=3979.0
Specificially:
$numvotes = $xml->xpath('/gallery/image[path="'.$_GET["image"].'"]/numvotes');
...
$numvotes[0][0] = $votes;
希望这有助于!
可能的重复[如何设置SimpleXmlElement的文本值而不使用其父级?](http://*.com/questions/3153477/how-can-i-set-text-value-of-simplexmlelement-没有使用它的父母) – 2017-01-25 10:02:39