1

次のように PHP 配列を変換する DOM XML 関数を探しています。

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

DOM XML NodeList へ

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

これは DoXML 関数を使用するには単純すぎる構造だと思います。この XML の単純なビュー テンプレートを作成する必要があると思います。次のようになります。

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

もちろん、正確なテンプレート構造はフレームワークによって異なります。たとえば、zend では $errors ではなく $this->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 には含まれません。また、 から Element を作成することはできませんが、 からDOMElement作成する必要がありますDOMDocument。あなたのコードは致命的なエラーを返します。

変化する

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

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

そして、それは動作します: http://codepad.org/GmCIBIQW

于 2012-05-19T10:24:54.233 に答える