操作されるデータ
<?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>
XML のいくつかの基本概念
1. ノード: ノードは、XML を処理するときに多くのプログラミング言語で使用されるノードであり、要素、属性、名前空間、コメントなどを含みます。 XML.、テキスト コンテンツ、処理命令、およびドキュメント全体がノードに属します。つまり、XML ドキュメントのそれぞれの独立した小さな部分がノードです。
2. 要素: 多くのプログラミング言語では XML 処理が行われます。ノードは API を統合する必要があるため、ノードのサブセットと言えます。単に
3. 属性: <> の XX="OO" などはすべて属性ノードです。必要に応じて、XML にもシンボルが含まれます。 use これらの特殊文字はエスケープする必要があります
私はDOMDocumentオブジェクトを使用してxmlを操作します。 もちろん、これは単純にphpを使用したときの個人的な感覚です。日。 DOMDocument には、よく使用されるプロパティとメソッドがいくつかあります。
$path=$_SERVER["DOCUMENT_ROOT"].'/books.xml'; $books=new DOMDocument(); $books->load($path);
$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/>'; }
echo $book->attributes->item(1)->nodeValue;
还可以通过强大的xpath查询
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);
$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue)); $attr->nodeValue=strtoupper($attr->nodeValue);
$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);
$first=$bookElements->item(0); $first->removeAttribute('publisher'); $second=$bookElements->item(1); $second->parentNode->removeChild($second); $books->save($path);