php操作xml

文章描述:

php如何生成xml文件和操作xml文件?

下面就给大家演示一哈php生成xml和对xml文件的操作:

生成

生成xml文件首先要实例化Xml类,然后定义文件头部和数据源,数据来自我们读取数据库文章的数据,代码如下:

$xml = new XmlWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('urlset');
$xml->writeAttribute('xmlns', "http://www.sitemaps.org/schemas/sitemap/0.9");
 
if(!$results = $db->get_results("SELECT * FROM tp_article WHERE id >0 ")){
    echo "没有数据,无法生成!";exit;
}
 
// $results是从数据库读出来的文章列表
foreach ($results as $item) {
    $xml->startElement('url');
    $xml->startElement('loc');
    $xml->text($item->link);
    $xml->endElement();
    $xml->startElement('lastmod');
    $xml->text(date('Y-m-d', strtotime($item->newstime)));
    $xml->endElement();
    $xml->startElement('changefreq');
    $xml->text("monthly");
    $xml->endElement();
    $xml->startElement('priority');
    $xml->text("1.0");
    $xml->endElement();
    $xml->endElement();
}
$xml->endElement();
$xml->endDocument();
$xml = $xml->outputMemory();
file_put_contents(
    './sitemap.xml',
    $xml
);
echo "生成成功!";

生成的文件我们保持为sitemap.xml

读取

生成xml文件以后,我们使用php读取以后xml里面的内容,然后再进行其它操作,读取xml代码如下:

foreach ($xml -> url as $val) {
    $attr = $val -> attributes();
    echo $val -> loc ;
    echo $val -> lastmod ;
    echo "</br>";
}

在读取xml文件的时候,会将$xml中将xml文件转换成的数组,可以直接通过$xml->book访问其下节点

修改

批量修改

在对xml文件进行修改的时候,也会将$xml文件转为数组,然后进行操作,下面是对xml文件一个字段进行批量操作,代码如下:

$content = file_get_contents('sitemap.xml');
$xml = new SimpleXMLElement($content);
foreach ($xml -> url as $val) {
    $attr = $val -> attributes();    //返回的是一个数字
    $val -> loc = "https://www.miyil.com";
}
$xml -> saveXML('sitemap.xml');

指定键值修改

$xml = simplexml_load_file('sitemap.xml'); //读取 XML
$xml->url->loc[0] = 'https://www.miyil.com/1.html'; //修改节点
$xml->saveXML('sitemap.xml');

删除

对xml文件里面的数据进行删除

$content = file_get_contents('sitemap.xml');
$xml = new SimpleXMLElement($content);
for($i = count($xml -> url) - 1 ;$i >= 0 ; $i --){
   unset($xml -> url[$i]);
}
$xml -> saveXML('sitemap.xml');

 

发布时间:2021/08/10

发表评论