PHP 中xml的使用


PHP 中xml的使用


正文

要用php生成这样的xml格式数据:

怎么处理呢?用下面这段代码就可以:

public function setXmlData($data = [])
{
    $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root/>');
    foreach ($data as $key => $value)
    {
        $item = $xml->addChild($key, $value);
    }
    
    return $xml->asXML();
}

看一个例子:

$sxe = new SimpleXMLElement($xmlstr);  // $xmlstr:格式良好的XML字符串,或XML文档的路径或URL(如果data_is_URL为真)。
$sxe->addAttribute('type', 'documentary');

$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');

$characters = $movie->addChild('characters');
$character  = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');

$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');
 
echo $sxe->asXML();

输出:

<?xml version="1.0" standalone="yes"?>
<movies type="documentary">
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#xD3;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
 <movie>
  <title>PHP2: More Parser Stories</title>
  <plot>This is all about the people who make it work.</plot>
  <characters>
   <character>
    <name>Mr. Parser</name>
    <actor>John Doe</actor>
   </character>
  </characters>
  <rating type="stars">5</rating>
 </movie>
</movies>

解析XML

解析XML用simplexml_load_string(),不过需要给PHP安装 SimpleXML 扩展。

如果收到一段xml格式的数据怎么办呢?转成array数组格式:

public function unsetXmlData($xml = "")
{
    $obj = simplexml_load_string($xml);
    $arr = json_decode(json_encode($obj), true);
}

无论是几层,有几层就返回几层数组。

<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
    <cmd>login</cmd>
    <login>Richard</login>
</document>
XML;
                                                                               
$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;
print_r($login);
$login = (string) $xml->login;
print_r($login);
?>

期望结果:

SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
Richard
Richard

实际结果:

SimpleXMLElement Object
(
    [cmd] => login
    [login] => Richard
)
SimpleXMLElement Object
(
    [0] => Richard
)
Richard 

理解一下。

SimpleXML 函数

SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局。

SimpleXML 转换 XML 文档到 SimpleXMLElement 对象。

通过正常的属性选择器和数组迭代器,这个对象能够像其他对象一样被处理。

提示:与 DOM 或者 Expat 解析器比较,SimpleXML 只需要几行代码就能读取元素中的文本数据。

SimpleXML 扩展需要 PHP 5 支持。

自 PHP 5 起,SimpleXML 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

PHP 5 SimpleXML 函数:

函数     描述
__construct()     创建一个新的 SimpleXMLElement 对象。
addAttribute()     给 SimpleXML 元素添加一个属性。
addChild()     给 SimpleXML 元素添加一个子元素。
asXML()     格式化 XML(版本 1.0)中的 SimpleXML 对象的数据。
attributes()     返回 XML 标签的属性和值。
children()     查找指定节点的子节点。
count()     计算指定节点的子节点个数。
getDocNamespaces()     返回文档中的声明的命名空间。
getName()     返回 SimpleXML 元素引用的 XML 标签的名称。
getNamespaces()     返回文档中使用的命名空间。
registerXPathNamespace()     为下一个 XPath 查询创建命名空间上下文。
saveXML()     asXML() 的别名。
simplexml_import_dom()     从 DOM 节点返回 SimpleXMLElement 对象。
simplexml_load_file()     转换 XML 文件为 SimpleXMLElement 对象。
simplexml_load_string()     转换 XML 字符串为 SimpleXMLElement 对象。
xpath()     运行对 XML 数据的 XPath 查询。

PHP 5 SimpleXML 迭代函数:

函数     描述
current()     返回当前元素。
getChildren()     返回当前元素的子元素。
hasChildren()     检查当前元素是否有子元素。
key()     返回当前键。
next()     移动到下一个元素。
rewind()     倒回到第一个元素。
valid()     检查当前元素是否有效。






参考资料

PHP 手册 函数参考 XML 操作 https://www.php.net/manual/zh/refs.xml.php

PHP中的XML解析的5种方法 https://www.cnblogs.com/caicaizi/p/7837286.html

PHP 手册 函数参考 XML 操作 SimpleXML https://www.php.net/manual/zh/book.simplexml.php

PHP 5 SimpleXML 函数 https://www.runoob.com/php/php-ref-simplexml.html

PHP XML Parser 函数 https://www.runoob.com/php/php-ref-xml.html

PHP Libxml 函数 https://www.runoob.com/php/php-ref-libxml.html


返回