代码之家  ›  专栏  ›  技术社区  ›  Dani

DOMDocument未更新nodeValue

  •  0
  • Dani  · 技术社区  · 7 年前

    所以我写了一段代码来编辑xml文件。但它似乎不起作用。我检查了所有内容,所有数据似乎都通过了,但不知何故,它并没有更新节点。创建xml文件和数据工作,添加数据也工作。但不知怎的,我似乎无法更新它。

    if ($edit && isset($_POST["submit"])) {
        $doc = new DomDocument('1.0');
    
        $doc->validateOnParse = true;
        $doc->load('data.xml');        
        $message = getElementById($_GET["id"], $doc);
        $message->getElementsByTagName("title")->nodeValue = 'hey';
        $message->getElementsByTagName("content")->nodeValue = $_POST["content"];
        $target = $message->getElementsByTagName("target")->nodeValue = $_POST["target"];
        $date1 = $message->getElementsByTagName("startDate")->nodeValue = $_POST["date1"];
        $date2 = $message->getElementsByTagName("endDate")->nodeValue = $_POST["date2"];
    
        $doc->formatOutput = true;
        $doc->save('data.xml');
    
    }
    
    function getElementById($id, $doc)
    {
        $xpath = new DOMXPath($doc);
        return $xpath->query("//*[@id='$id']")->item(0);
    }
    

    XML:

    <message id="5a1c301ae5429" top="12px" left="12px" duration="20">
    <title>hey</title>
    <content>12345</content>
    <target>2</target>
    <startDate>27/11/2017 16:30</startDate>
    <endDate>27/11/2017 16:50</endDate>
    <media type="image" width="200px" height="200px" top="-20px" left="129px">
    <uri>
    localhost/xml/uploads/4215c27edf5ff51aee0def29f84949be.jpg
    </uri>
    </media>
    </message>
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Nigel Ren    7 年前

    当你打电话的时候 getElementsByTagName ,这将返回与标记名匹配的节点列表。所以每次访问值时,都应该使用。。。

    $message->getElementsByTagName("title")->item(0)->nodeValue = 'hey';
    

    因为每个标签只有一个,所以我使用了 ->item(0) 获取列表中的第一个节点。

    在需要访问元素的所有时间重复相同的逻辑。