2016-03-05 2 views
2

после этого поста Saving form data to an existing XML-file using PHPЯ хотел бы иметь возможность редактировать тег заголовка XML

я хотел бы знать, как я могу сохранить несколько переменных в файл XML. используя описанный метод, я могу сохранить только последний.

я нашел метод работает, как я хочу

$xml="\n\t\t<Bares>\n\t\t";  
    { 
     while ($stmt->fetch()){ 

       $xml .="<Bar>\n\t\t"; 
       $xml .= "<nome>".$nome."</nome>\n\t\t"; 
       $xml .= "<morada>".$morada."</morada>\n\t\t"; 
       $xml .= "<nif>".$nif."</nif>\n\t\t"; 
       $xml .= "<telefone>".$telefone."</telefone>\n\t\t"; 
       $xml .= "<email>".$email."</email>\n\t\t"; 
       $xml .= "<imgid>".$imgid."</imgid>\n\t\t"; 
       $xml.="</Bar>\n\t"; 

     } 

      $xml.="</Bares>\n\r"; 

      $doc = new DOMDocument('1.0'); 
      $doc->formatOutput = true; 
      $doc->preserveWhiteSpace = true; 
      $doc->loadXML($xml, LIBXML_NOBLANKS); 
      $doc->save('dados.xml');     

, но я хотел бы иметь возможность редактировать тег заголовка XML (XML версия = «1.0»?), И я не могу сделать это таким образом

+0

Почему вы не используете DomDocument в [createElement()] (http://php.net/manual/en/domdocument.createelement.php) и [appendChild()] (http://php.net/manual/en/domnode.appendchild.php)? – Parfait

+0

Так как я не смог сохранить все элементы в документе xml, был сохранен только последний. это то, что у меня было: '$ xml-> bar =" "; \t \t \t \t $ xml-> bar-> addChild ('nome_bar', $ nome); \t \t \t \t $ xml-> bar-> addChild ('morada_bar', $ morada); \t \t \t \t $ xml-> bar-> addChild ('nif_bar', $ nif); \t \t \t \t $ xml-> bar-> addChild ('telefone_bar', $ telefone); \t \t \t \t $ xml-> bar-> addChild ('email_bar', $ email); \t \t \t \t $ xml-> bar-> addChild ('imageId', $ imgid); $ doc = новый DOMDocument ('1.0'); \t \t \t \t $ doc-> formatOutput = true; \t \t \t \t $ doc-> preserveWhiteSpace = true; \t \t \t \t $ doc-> loadXML ($ xml-> asXML(), LIBXML_NOBLANKS); \t \t \t \t $ doc-> Сохранить ('dados.xml'); ' – hirokumata

+0

Это потому, что вы не итеративно добавить' ', как ребенок корень' '. – Parfait

ответ

0

Снова используйте методы DOMDocument() вместо построения XML с конкатенацией строк. Использование информационных руководств РНР, ниже показано, как добавить Document Type Declaration (DTD) и XSLT processing line:

// Create an instance of the DOMImplementation class 
$imp = new DOMImplementation;  
// Create a DOMDocumentType instance 
$dtd = $imp->createDocumentType('graph', '', 'graph.dtd'); 

// Create a DOMDocument instance 
$doc = $imp->createDocument();  
// Set other properties 
$doc->encoding = 'UTF-8'; $doc->standalone = true; 
$doc->formatOutput = true; $doc->preserveWhiteSpace = true; 

// Create an XSLT adding processing line 
$xslt = $doc->createProcessingInstruction('xml-stylesheet', 
              'type="text/xsl" href="base.xsl"');  
// Append XSLT instruction to the doc 
$doc->appendChild($xslt); 
// Append DTD to the doc 
$doc->appendChild($dtd); 

// Create root 
$root = $doc->appendChild($doc->createElement('Bares')); 

// Iteratively append the elements (with values) 
while ($stmt->fetch()){       
    $barNode = $root->appendChild($doc->createElement('bare')); 
    $nomeNode = $barNode->appendChild($doc->createElement('nom', $nome)); 
    $moradaNode = $barNode->appendChild($doc->createElement('morada', $morada));     
    $nifNode = $barNode->appendChild($doc->createElement('nif', $nif)); 
    $telefoneNode = $barNode->appendChild($doc->createElement('telefone', $telefone)); 
    $emailNode = $barNode->appendChild($doc->createElement('email', $email)); 
    $imgidNode = $barNode->appendChild($doc->createElement('imgid', $imgid));   
} 

$doc->save('dados.xml'); 
+0

Отличное решение отлично работает. Благодаря!! – hirokumata

+0

Отлично! Пожалуйста, подтвердите разрешение. – Parfait

Смежные вопросы