2013-05-27 3 views
0

У меня есть файл XML, такие как это:Как заменить специальный XML-тег с помощью PHP

<?xml version="1.0"?> 
<datas> 
<books> 
<book> 
<id>1</id> 
<title>PHP Undercover</title>  
<author>Wiwit Siswoutomo</author> 
</book>`enter code here` 
<book> 
<id>2</id> 
<title>PHP Enterprise</title>  
<author>Wiwit Siswoutomo</author> 
</book> 
</books> 
</datas> 

и теперь я ВАН заменить специальный тег таким образом: поиска в XML-файл и если он имеет PHP Enterprise, найдите его и замените его на «новый заголовок». Что мне делать? TNX

+0

Попробуйте 'str_replace '? –

ответ

0

Этот скрипт поможет вам! Попробуйте это :)

<?php 
function replace_Special_Str($mystring) 
{ 
    //Load file 
    $filename="./myfile.xml"; 
    if (!file_exists($filename)) { echo "There is not a myfile.xml file in the directory."; exit;} 
    $xml = simplexml_load_file($filename); 

    //search and replace particular node by book title 
    $node = $xml->xpath('/datas/books[title="' . $mystring. '"]'); 
    if(sizeof($node) > 0) 
    {                    
     $node[0]->title = 'My Title'; 
    } 
    $xml->asXML('./aucstatus.xml'); 
} 
?> 

ИЛИ Попробуйте это,

<users> 
    <name>John</name> 
    <address>My Address</address> 
    <zipcode>12345</zipcode> 
    <city>My City</city> 
    <phone>555 1234-4321</phone> 
</users> 

PHP FILE

fopen('users.xml'); 
while ($users->read()) { 
    switch ($users->nodeType) { 
      case (XMLReader::ELEMENT): 
       if ($users->localName == "users") { 
      $node = $reader->expand(); 
      $dom = new DomDocument(); 
      $n = $dom->importNode($node,true); 
      $dom->appendChild($n); 
      $simple_xml = simplexml_import_dom($n); 
      $id = $simple_xml['id']; 
      $name = $simple_xml->name; 
      $address = $simple_xml->address; 
        // Custom code insert, update, whatever... 
       } 
    } 
} 
+0

Благодарим вас за ответ, но это решение имеет большую загрузку, и если мой xml-файл очень большой, этот способ занимает много времени. Вы можете предложить лучшую функцию? Tnx –

+0

@sepidehfaraji У меня есть модификация моего скрипта и добавление другой функции, но это точно не соответствует вашему файлу, но я надеюсь, что помогу вам! – webGautam

0

Вы можете разобрать документ с SimpleXML:

$datas = new SimpleXMLElement("my.xml"); 
foreach ($datas->books->book as $book) { 
    if (preg_match('/PHP Enterprise/', $book->title) { 
     $book->title = "new title"; 
    } 
} 

$datas->asXML("my.xml"); 
Смежные вопросы