繁体   English   中英

通过PHP表单更新XML

[英]Update XML via PHP form

我有一个xml文件,我正在从中读取数据并尝试通过表单进行更新。 我有一个书籍列表和一个“编辑”按钮,它将书的ID传递给名为“edit.php”的页面。 $ id变量通过$ _GET正确传递(回显页面上的$ id进行测试)。 这是我尝试过的,但我一直在下面的指示行收到错误。 这是我读取xml的地方:

$xml = new DOMDocument('1.0', 'utf-8');
$xml->load('DATA/Books.xml');

$id = $_GET['id'];

//Get item Element
$book = $xml->getElementsByTagName('book')->item($id);

//Load child elements
$title= $book->getElementsByTagName('title')->item(0); //error here
$author= $book->getElementsByTagName('author')->item(0);

//Replace old elements with new
$book->replaceChild($title, $title);
$book->replaceChild($author, $author);
header('location:Books.php');
?>

这是我正在处理提交表单的地方:

<?php
if (isset($_POST['submit'])) {
    $title->nodeValue = $_POST['newTitle'];
    $author->nodeValue = $_POST['newAuthor'];
    htmlentities($xml->save('DATA/Books.xml'));
}
?>

这是我的表格:

<form class="form" method="post">
    <input type="text" name="newTitle" id="title" value="<?php echo $title->nodeValue;?>" class="form-control">
    <input type="text" name="newAuthor" id="author" value="<?php echo $author->nodeValue;?>" 
    <input type="submit" name="submit" class="btn btn-info btn-md" value="Update">
</form>

这是我的xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="3"><title>Test</title><author>Test</author></book>
</books>

考虑构建所需的节点片段,然后导入主DOM。 请参阅以下示例,您可以在其中将表单值调整到所需位置:

$xml = new DOMDocument('1.0', 'utf-8');
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;

$xml->loadXML('<?xml version="1.0" encoding="UTF-8"?>
   <books>
      <book id="3">
         <title>Test</title>
         <author>Test</author>
      </book>
   </books>');

// Search Needed Path
$id = 3;    
$xpath = new DOMXpath($xml);
$nodelist = $xpath->query("/books/book[@id='$id']");    
$old_book = $nodelist->item(0);

// Create Fragment
$root = new DomDocument;
$new_book = $root->createElement('book');

$new_book->appendChild($root->createElement('title', 'my new title'));
$new_book->appendChild($root->createElement('book', 'my new book'));
$root->appendChild($new_book);

// Import Fragment
$new_book = $xml->importNode($root->documentElement, true);    
// Replace Old for New
$old_book->parentNode->replaceChild($new_book, $old_book);

echo $xml->saveXML();

在线演示

产量

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <title>my new title</title>
    <book>my new book</book>
  </book>
</books>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM