1

我正在寻找一个 DOM XML 函数来转换 PHP 数组,如下所示:

<?php
$errors = array("A", "B", "C", "D");
?>

到 DOM XML 节点列表

<?xml version="1.0" standalone="no"?>
<error>
    <missing>A</missing>
    <missing>B</missing>
    <missing>C</missing>
    <missing>D</missing>
</error>

非常感谢您的帮助 :)

我尝试了以下代码:

<?php
$basedoc = new DomDocument();
$basedoc->Load("Standard.svg"); //Fichier SVG de base
$baseroot = $basedoc->documentElement; //On prend l'élément racine
$errorgroup = $basedoc->createElement('error'); //On crée le groupe de base
foreach($erreurs as $erreur) {
    $missinggroup = $errorgroup->createElement('missing'); //On crée le groupe de base
    $errorgroup->appendChild($missinggroup);
}
$baseroot->appendChild($errorgroup);
?>
4

2 回答 2

0

我认为这种结构过于简单,无法使用 DomXML 函数。我认为你应该为这个 XML 创建简单的视图模板——它看起来像这样:

<?xml version="1.0" standalone="no"?>
<error>
    <?php foreach ($errors as $error):?>
        <missing><?php echo $error;?></missing>
    <?php endforeach;?>
</error>

确切的模板结构当然取决于您的框架 - 例如,在 zend 中它将是 $this->errors 而不是 $errors。

Od 在第一个链接中使用 @bassem-ala 建议的 SimpleXML。

更新

这是基于表生成 XML 的“递归”函数。类似的东西

function generateXMLElement($elements, $rootNode = null, $rootNodeName = 'xml')
{
    if (!$rootNode)
    {
        $rootNode = new SimpleXMLElement('<'.$rootNodeName.'/>');
    }
    foreach ($elements as $key => $val)
    {
        if (is_array($val))
        {
            $childElem = $rootNode->addChild($key);
            generateXMLElement($val, $childElem);
        }
        else
        {
            $childElem = $rootNode->addChild($key, $val);
        }
    }
    return $rootNode;
}

你得到XML$xml = generateXMLElement($errors, null, 'error'); 然后你可以使用打印它print($xml->asXML());

于 2012-05-19T10:16:16.740 回答
0

您没有$erreur在创建代码中使用任何地方,因此显然它不会出现在生成的 XML 中。此外,您不能从 a 创建元素,DOMElement但必须从DOMDocument. 您的代码将给出致命错误。

改变

$missinggroup = $errorgroup->createElement('missing');

$missinggroup = $basedoc->createElement('missing', $erreur);

然后它将起作用:http ://codepad.org/GmCIBIQW

于 2012-05-19T10:24:54.233 回答