Data to be manipulated
<?xml version="1.0"?>
<books>
<book name="JavaScript: The Defiitive Guide" publisher="O'Reilly Media, Inc.">
<author>David Flanagan</author>
</book>
<book name="PHP anf MySQL Web Development" publisher="Perason Education">
<author>Luke Welling</author>
<author>Laura Thomson</author>
</book>
<book name="HTTP: The Defiitive Guide" publisher="O'Reilly Media, Inc.">
<author>David Courley</author>
<author>Brian Totty</author>
</book>
</books>Several basic concepts of XML
1. Node: Node is the Node used in many programming languages when processing XML. Node is a relatively broad concept, including elements, attributes, namespaces, and comments in XML. , text content, processing instructions, and the entire document belong to nodes, that is to say, each independent small part of the XML document is a node,
2. Elements: Many programming languages have XML processing. Node is a very broad concept. Because of the need to unify the API, there will not be too many methods for nodes. Elements are a subset of nodes. To put it simply It’s just tags like
3. Attributes: This is easier to understand. Things like XX="OO" in <> are all attribute nodes.
4. Escape characters: Similar to HTML, xml also has language-occupied symbols. If you want to use These special characters need to be escaped

DOMDocument object
I use the DOMDocument object to operate xml. I feel that it is more scientific than simpleXml. Of course, it is purely a personal feeling when using php on the first day. DOMDocument has several commonly used properties and methods.

Load xml
$path=$_SERVER["DOCUMENT_ROOT"].'/books.xml';
$books=new DOMDocument();
$books->load($path);Read/traverse nodes and attributes
$bookElements=$books->getElementsByTagName('book');
foreach($bookElements as $book){
foreach ($book->attributes as $attr) {
echo strtoupper($attr->nodeName).' —— '.$attr->nodeValue.'<br/>';
}
echo "AUTHOR: ";
foreach ($book->getElementsByTagName('author') as $author) {
echo $author->nodeValue.' ';
}
echo '<br/><br/>';
}
Of course, for many attributes, if you only want to read one, you can read by index through the item(index) method
echo $book->attributes->item(1)->nodeValue;
You can also pass Powerful xpath query
还可以通过强大的xpath查询
Modify attributes/nodes
foreach($bookElements as $book){
foreach ($book->attributes as $attr) {
#$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue));
$attr->nodeValue=strtoupper($attr->nodeValue);
}
echo "AUTHOR: ";
foreach ($book->getElementsByTagName('author') as $author) {
$author->nodeValue=strtoupper($author->nodeValue);
}
}
$books->save($path);
For attribute modifications, you can directly access its nodeValue changes, or you can use the setAttribute method. Don’t forget to use save after making changes.
$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue)); $attr->nodeValue=strtoupper($attr->nodeValue);
Add elements/attributes
$newBook=$books->createElement('book'); #创建新元素
$newBook->setAttribute('name','PHP Objects, Patterns, and Practice');#创建新属性,方法一
$publisher=$books->createAttribute('publisher');#创建新属性,方法二
$publisher->nodeValue='Apress L.P';
$newBook->appendChild($publisher); #把属性添加到元素上
$author=$books->createElement('author');#创建子元素
$author->nodeValue='Matt Zandstra';
$newBook->appendChild($author);#把子元素添加到父元素上
$books->documentElement->appendChild($newBook);#添加整个节点
$books->save($path);Delete attributes/nodes
$first=$bookElements->item(0);
$first->removeAttribute('publisher');
$second=$bookElements->item(1);
$second->parentNode->removeChild($second);
$books->save($path);
For more articles related to php operation xml, please pay attention to PHP Chinese website!