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!