0

私はxmlを初めて使用するので、ここでコードを試して、データをxmlに挿入しました。これは機能します。しかし、xmlに複数のデータを挿入したいと思います。どうすればそれを達成できますか?例えば:

<root>
<no>1</no>
<activity>swimming</activity>
<date>29/7/2010</date>
<others>
   <data1>data1</data1>
   <data2>data2</data2>
   <data3>data3</data3>
   so on..
</others>
<no>2</no>
<activity>sleeping</activity>
<date>29/7/2010</date>
<others>
   <data1>data1</data1>
   <data2>data2</data2>
   <data3>data3</data3>
   so on..
</others>
</root>

index.php:

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS);

    $activities = $xmldoc->firstChild->firstChild;
    if($activities != null){
            while($activities != null){
                            ?>
            <div id="xml">
                <span>
                <?php echo $activities->textContent ?> </span> <br />

            </div>
                        <?php
                        $activities = $activities->nextSibling;
            }
        }
 ?>

<body>
<form name="input" action="insert.php" method="post">
    Insert Activity:
    <input type="text" name="activity" />
    <input type="submit" value="Send" />
</form>
</body>
</html>

insert.php:

<?php
    header("Location: index.php");

    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');
    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;
    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);
    $xmldoc->save('sample.xml');

?>

上記のコードは1つのノードのみを挿入します。複数のノードと子ノードを挿入する方法を知りたい

4

1 に答える 1

2

「1回のメソッド呼び出しで一度に複数のノードを挿入する方法」を意味する場合、答えは次のとおりです。それは不可能です。

DOMを使用したアプローチは常に同じです。ノードを作成し、どこかに追加します。一つずつ。

上記の例では、TextNodeの作成を省略し、文字列の内容を2番目の引数としてに追加できますcreateNode。ただし、これは自動エスケープとエンティティエンコーディングを使用しません。

一括作成の唯一の方法は、 DOMDocumentFragment::appendXMLです。これは、入力に任意のXML文字列を取ります。ただし、これは非標準です。

于 2010-07-29T12:34:09.740 に答える