生成特定的xml文件

时间:2017-11-19 19:50:24

标签: php xml

我必须生成一个看起来与此完全相同的xml文件(只会更改值):

<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>

我的尝试总是返回这样的东西(这个xml down是我正在做的一个测试,学习如何构建情感):

my xml output

my xml output

恢复:我的xml没有被认可,头部以xml标签开头(我想从emotionml标签开始),我不知道如何使用其属性制作情感标签。

编辑1 :(我的代码)

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);
}

2 个答案:

答案 0 :(得分:0)

SimpleXML在格式化输出方面不是很好,你必须使用DOMDocument和各种选项来为你提供更多的东西......

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

这将替换您当前拥有的文件。它从$xml->asXML()获取输出并将其加载到DOMDocument中并将输出格式化为文件。

要排除xml标记,你必须做更多的处理,而不是上面代码末尾的$ dom-&gt;保存,你必须回去自己编写文件,但这次使用以上代码的输出......

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

答案 1 :(得分:0)

我解决了创建简单文本文件并在其上插入格式化字符串的问题:

$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);