2013-03-27 3 views
4

Я пытаюсь написать код, в котором он найдет определенный элемент в моем XML-файле, а затем изменит значение текстового узла. XML-файл имеет разные пространства имен. До сих пор мне удалось зарегистрировать пространства имен, а также повторить текстовый узел элемента, который я хочу изменить.Измените значение текстового узла с помощью 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> 

Благодаря Димитрис

+0

Возможный дубликат [Как установить текстовое значение элемента SimpleXmlElement без использования его родителя?] (Http://stackoverflow.com/questions/3153477/how-can-i-set-text-value-of-simplexmlelement- без использования-его-родителя) –

ответ

1

В конце концов мне удалось сделать это с помощью 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()); 
    ?> 
-2

Вы можете сделать это следующим образом:

$xml->value = "what you want?"; 
+0

Кажется, что не работает. – user1919

+0

Можете ли вы дать мне часть дампа xml, которую вы хотите изменить? – Ogelami

+0

Да. Я переписываю вопрос. – user1919

0

Не желая, чтобы перейти от кода, который я уже сделал для 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; 

Надеется, что это помогает!