2017-11-19 1 views
0

Ich habe eine XML-Datei zu erzeugen, die genau so aussieht (nur die Werte geändert werden):eine bestimmte XML-Datei

<emotionml version="1.0" xmlns="http://www.w3.org/2009/10/emotionml"> 
    <emotion xmlns="http://www.w3.org/2009/10/emotionml" category-set="http://www.w3.org/TR/emotion-voc/xml#fsre-categories" start="1508862134106" duration="30"> 
     <category name="anger" value="0.00"/> 
     <category name="contempt" value="0.20"/> 
     <category name="disgust" value="0.43"/> 
     <category name="fear" value="0.00"/> 
     <category name="joy" value="0.00"/> 
     <category name="sadness" value="0.03"/> 
     <category name="surprise" value="0.21"/> 
    </emotion> 
    <BEHAVIOR start="1508862134106" duration="30"> 
     <category name="Engaged" value="0.08"/> 
    </BEHAVIOR> 
</emotionml> 

Mein versuchen immer wieder zurückkehrt so etwas wie diese (diese xml unten ist ein Test dass Im tun zu lernen, wie die Emotionen gebaut eins):

my xml output

my xml output

wieder aufnehmen: meine xml in nicht ide Der Kopf beginnt mit dem xml-Tag (ich möchte mit dem emotionml-Tag beginnen) und ich weiß nicht, wie ich das Emotion-Tag mit seinen Attributen erstellen soll.

EDIT 1: (mein Code)

function index(){ 
    $pessoa = [ 
     'person' => [ 
      $_POST['username'] => 'nome', 
      $_POST['email'] => 'email', 
      $_POST['sexo'] => 'sexo', 
     ] 
    ]; 

    $xml = '<emotionml version="1.0" xmlns="http://www.w3.org/2009/10/emotionml"></emotionml>'; 

    array_walk_recursive($pessoa, array($xml, 'addChild')); 
    print($xml->asXML()); 

    $xmlFile = fopen("teste.xml", "a"); 
    $escreve = fwrite($xmlFile, $xml->asXML()); 
    fclose($xmlFile); 
} 
+0

können Sie enthalten den Code, ist es manchmal leichter zu beheben bestehende Code als etwas völlig anderes schreiben. –

+0

Ok, es ist fertig. –

+0

Wie verhält sich die gewünschte Ausgabe zum aktuellen Versuch? Zum Beispiel, wo ist * email * in der gewünschten Version? Beginnen Sie mit einer XML-Quelldatei? – Parfait

Antwort

0

SimpleXML bei der Formatierung Ausgang nicht sehr gut ist, haben Sie DOMDocument und die verschiedenen Optionen verwenden Sie etwas ein bisschen mehr zu geben, als erwartet ...

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($xml->asXML()); 
$dom->save("teste.xml"); 

Dies ersetzt die Datei schreiben, die Sie derzeit haben. Es nimmt die Ausgabe von $xml->asXML() und lädt es in ein DOMDocument und formatiert die Ausgabe in die Datei.

Um das XML-Tag auszuschließen, müssen Sie mehr Verarbeitung, anstatt der $ dom-> speichern am Ende des oben genannten Codes, müssen Sie zurückgehen, um die Datei selbst zu schreiben, aber dieses Mal mit die Ausgabe des obigen Code ...

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($xml->asXML()); 
file_put_contents("teste.xml", $dom->saveXML($dom->documentElement)); 
+0

Danke, Nigel! Sie haben mir sehr geholfen. –

0

ich mein Problem gelöst, um eine einfache Textdatei, und legen Sie formated Saiten auf sie zu schaffen:

$br = PHP_EOL; $tb1 = "\t"; tb2= "\t\t"; 
$headerEmotion = '<emotionml version="1.0" xmlns="http://www.w3.org/2009/10/emotionml">'. $br; 
$botEmotionml = '</emotionml>'. $br; 
$catEmotion = 
      $tb2 . '<category name="anger" value="' . ($frame['emotions']['anger'])/100 . '"/>' . $br . 
      $tb2 . '<category name="contempt" value="' . ($frame['emotions']['contempt'])/100 . '"/>' . $br . 
      $tb2 . '<category name="disgust" value="' . ($frame['emotions']['disgust'])/100 . '"/>' . $br . 
      $tb2 . '<category name="fear" value="' . ($frame['emotions']['fear'])/100 . '"/>' . $br . 
      $tb2 . '<category name="joy" value="' . ($frame['emotions']['joy'])/100 . '"/>' . $br . 
      $tb2 . '<category name="sadness" value="' . ($frame['emotions']['sadness'])/100 . '"/>' . $br . 
      $tb2 . '<category name="surprise" value="' . ($frame['emotions']['surprise'])/100 . '"/>' . $br; 

$xmlFile = fopen('php://output', 'w'); 
fwrite($xmlFile, $headerEmotion); 
fwrite($xmlFile, $catEmotion); 
fwrite($xmlFile, $botEmotion); 
fclose($xmlFile); 
+0

Sie sollten XML niemals durch Zeichenfolgenwerte erstellen. Verwenden Sie DOM-Methoden wie PHP [simplexml] (http://php.net/manual/de/book.simplexml.php) oder [DOMDocument] (http://php.net/manual/en/class.domdocument.php) . – Parfait

+0

Ich habe es versucht, aber ich weiß nicht, warum ich mit diesen Methoden keine spezifische XML-Datei erstellen konnte –