1

これは、Web サイトのサイトマップを示す XML ドキュメントのサンプルです。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Esurance 365 Portal">
    <elements>
        <element name="folderone" path="forms/folderone">
            <folder function="model">models</folder>
            <folder function="controller">controllers</folder>
            <folder function="view">views</folder>
        </element>
    </elements>
</project>

DOMDocument次のように表示されるように、図に示されているものの上に別の要素ノードを追加するために使用したいと思います

<?xml version="1.0" encoding="UTF-8"?>
    <project name="Esurance 365 Portal">
        <elements>
           <element name="foldertwo" path="forms/foldertwo">
                <folder function="model">modelstwo</folder>
                <folder function="controller">controllerstwo</folder>
                <folder function="view">viewstwo</folder>
            </element>
            <element name="folderone" path="forms/folderone">
                <folder function="model">models</folder>
                <folder function="controller">controllers</folder>
                <folder function="view">views</folder>
            </element>
        </elements>
    </project>

しかし、DOMDocumentドキュメントから、新しい要素がどのように達成されるかを示す例さえ見つけられないようです。

createElementおよびメソッドはappendChild、要素ノードを挿入する方法のみを示していますが、残りのフォルダーの子ノードを挿入する方法は示していません。

4

1 に答える 1

2

elementタグを選択cloneNode()し、コピーに使用します。setAttribute()属性の新しい値の設定を使用しnodeValue、ターゲット タグで新しいテキストの設定を使用します。コードの最後で、 を使用して既存の要素の前に新しい要素を挿入しinsertBefore()ます。

$dom = new DOMDocument();
$dom->loadXml($xml);
// select "element" tag and copy it
$element = $dom->getElementsByTagName("element")->item(0);
$clone = $element->cloneNode(true);
// change value of attribute 
$clone->setAttribute("name", "foldertwo");
$clone->setAttribute("path", "forms/foldertwo");
// select "folder" tag in new "element" tag change text of them
$folder = $clone->getElementsByTagName("folder");
$folder->item(0)->nodeValue = "modelstwo";
$folder->item(1)->nodeValue = "controllerstwo";
$folder->item(2)->nodeValue = "viewstwo";
// insert new elements before existing element.
$element->parentNode->insertBefore($clone, $element);
$xml = $dom->saveXml();

デモで結果を見る

于 2017-03-07T13:36:16.140 に答える