Home  >  Article  >  Backend Development  >  How to use php to parse xml files_PHP tutorial

How to use php to parse xml files_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:17:19785browse

DOMElement

 DOMElement DOMDocument::createElement ( string $name [, string $value ] )

Create node element

String $name:Node name

String $value: The value of the node

8. Add node

•DOMNode DOMNode::appendChild ( DOMNode $newnode )

Add child node

 DOMNode $newnode: new node

In DOM operations, addition, deletion and modification operations must depend on the parent node

9. Save

•string DOMDocument::saveXML

Save to a string

•int DOMDocument::save ( string $filename )

Save to a file

String $filename:File name

 10. Delete node

•DOMNode DOMNode::removeChild ( DOMNode $oldnode )

Delete node

DOMNode $oldnode: The node to be deleted

 11. Update node

•DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )

 DOMNode $newnode: new node

 DOMNode $oldnode: original node

 12. Add attributes

•DOMAttr DOMElement::setAttribute( string $name , string $value )

String $name: attribute name

String $value: attribute value

 13. Modify attributes

 DOMAttr DOMElement::setAttribute( string $name, string $value)

String $name: attribute name

String $value: attribute value

 14. Delete attributes

•bool DOMElement::removeAttribute ( string $name )

String $name: The name of the attribute to be deleted

 15. Get attributes

•string DOMElement::getAttribute ( string $name )

String $name: The attribute name of the attribute value to be obtained

DOMDocument is also part of the DOM extension launched after PHP5. It can be used to create or parse html/xml. Currently, it only supports utf-8 encoding.

The code is as follows

$xmlstring = <<

login
imdonkey

XML;

$dom = new DOMDocument();
$dom->loadXML($xmlstring);
print_r(getArray($dom->documentElement));

function getArray($node) {
$array = false;

if ($node->hasAttributes()) {
foreach ($node->attributes as $attr) {
$array[$attr->nodeName] = $attr->nodeValue;
}
}

if ($node->hasChildNodes()) {
if ($node->childNodes->length == 1) {
$array[$node->firstChild->nodeName] = getArray($node->firstChild);
} else {
foreach ($node->childNodes as $childNode) {
if ($childNode->nodeType != XML_TEXT_NODE) {
$array[$childNode->nodeName][] = getArray($childNode);
}
}
}
} else {
return $node->nodeValue;
}
return $array;
}

SimpleXML

SimpleXML is a set of simple and easy-to-use XML tools provided after PHP5. It can convert XML into objects that are convenient for processing, and can also organize and generate XML data. However, it does not apply to xml containing namespace, and the xml must be well-formed. It provides three methods: simplexml_import_dom, simplexml_load_file, simplexml_load_string. The function name intuitively explains the function. All three functions return SimpleXMLElement objects, and data is read/added through SimpleXMLElement operations

The code is as follows


$string = <<

login
imdonkey

XML;

代码如下  


$string = <<

login
imdonkey

XML;

$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;//这里返回的依然是个SimpleXMLElement对象
print_r($login);
$login = (string) $xml->login;//在做数据比较时,注意要先强制转换
print_r($login);

$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;//What is returned here is still a SimpleXMLElement object
print_r($login);
$login = (string) $xml->login;//When doing data comparison, be sure to force conversion first
print_r($login);

The advantage of SimpleXML is that it is simple to develop. The disadvantage is that it loads the entire xml into the memory before processing, so it may not be able to parse an xml document with a lot of content. If you are reading small files and the xml does not contain namespace, then SimpleXML is a good choice.

XMLReader

XMLReader is also an extension after PHP5 (installed by default after 5.1). It moves in the document flow like a cursor and stops at each node. It is very flexible to operate. It provides fast and non-cached streaming access to input, and can read a stream or document, allowing the user to extract data from it, and skip records that are not meaningful to the application.

Let’s use an example of using Google Weather API to obtain information to demonstrate the use of XMLReader. Only a small number of functions are involved here. For more information, please refer to the official documentation.

The code is as follows

$xml_uri = 'http://www.google.com/ig/api?weather=Beijing&hl=zh-cn';
$current = array();
$forecast = array();

$reader = new XMLReader();
$reader->open($xml_uri, 'gbk');
while ($reader->read()) {
//get current data
if ($reader->name == "current_conditions" && $reader->nodeType == XMLReader::ELEMENT) {
while($reader->read() && $reader->name != "current_conditions") {
$name = $reader->name;
$value = $reader->getAttribute('data');
$current[$name] = $value;
}
}

//get forecast data
if ($reader->name == "forecast_conditions" && $reader->nodeType == XMLReader::ELEMENT) {
$sub_forecast = array();
while($reader->read() && $reader->name != "forecast_conditions") {
$name = $reader->name;
$value = $reader->getAttribute('data');
$sub_forecast[$name] = $value;
}
$forecast[] = $sub_forecast;
}
}
$reader->close();

XMLReader is similar to XML Parser, both operate while reading. The big difference is that the SAX model is a "push" model, in which the analyzer pushes events to the application and notifies the application each time a new node is read. program, and the application using XmlReader can extract nodes from the reader at will, with better controllability.

Since XMLReader is based on libxml, you should refer to the documentation for some functions to see if they are applicable to your libxml version.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/372026.htmlTechArticleDOMElement DOMElement DOMDocument::createElement ( string $name [, string $value ] ) Create node element String $name: Node name String $value: the value of the node 8. Add node DOMN...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn