通过PHP DOM操作添加新的XML元素

问题描述

我正在尝试向此XML文档添加名为member的新XML元素:

<?xml version="1.0" encoding="UTF-8"?>
<members>
    <member id="1" position="president">
        <firstname>John</firstname>
        <surname>Smith</surname>
        <score>12</score>
    </member>
    <member id="2">
        <firstname>Hank</firstname>
        <surname>Rogers</surname>
        <score>18</score>
    </member>
    <member id="3" position="secretary">
        <firstname>Joe</firstname>
        <surname>Ashton</surname>
        <score>21</score>
    </member>
</members>

这是我的PHP脚本:

function updateDom() {
        $dom = new DOMDocument();
        $dom->preserveWhiteSpace = false;
        $dom->load("members.xml");

        $member = $dom->createElement("member");
        $firstname = $dom->createElement("firstname");
        $surname = $dom->createElement("surname");
        $score = $dom->createElement("score");
        
        $firstnameValue = $dom->createTextNode("New");
        $surnameValue = $dom->createTextNode("New");
        $scoreValue = $dom->createTextNode("New");

        $firstname->appendChild($firstnameValue);
        $surname->appendChild($surnameValue);
        $score->appendChild($scoreValue);

        $dom->documentElement->appendChild($member);
        print $dom->saveXML();
    }

不幸的是,当我print $dom->saveXML();没有将新元素插入DOM时,它确实会打印:

JohnSmith12HankRogers18JoeAshton21

解决方法

如果您检查输出XML,则最后会看到一个空的<member/>,因为您没有将任何子元素附加到$member

function updateDom() {
    $dom = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->load("members.xml");

    $member = $dom->createElement("member");
    $firstname = $dom->createElement("firstname");
    $surname = $dom->createElement("surname");
    $score = $dom->createElement("score");

    $firstnameValue = $dom->createTextNode("New");
    $surnameValue = $dom->createTextNode("New");
    $scoreValue = $dom->createTextNode("New");

    $firstname->appendChild($firstnameValue);
    $surname->appendChild($surnameValue);
    $score->appendChild($scoreValue);

    // Append child elements
    $member->appendChild($firstname);
    $member->appendChild($surname);
    $member->appendChild($score);

    $dom->documentElement->appendChild($member);
    print $dom->saveXML();
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...