/*
XMLReader读XML文件
$path xml文件路径
$xmlTag 需要读取的标签内容
$rowTag 数据包含标签
例:xmlToArr('./sitemap.xml',['loc','priority','lastmod','changefreq'],'url');
*/
function xmlToArr($path,$xmlTag,$rowTag){
$xml = new \XMLReader();
$xml->open($path);
$xmlToArr = array();
$count = 0;//记录数:方便组装数据
$name = '';
while($xml->read()) {
$n = $xml->name;
if($xml->nodeType == $xml::ELEMENT) {
if($n == $rowTag) {//开始下一条记录的读取
$count ++;
} else if(in_array($n, $xmlTag)) {//记录需要获取文本值的标签名
$name = $n;
}
} else if($xml->nodeType == $xml::TEXT) {
if(in_array($name, $xmlTag)) {
$xmlToArr[$count][$name] = $xml->value;
}
}
}
$xml->close();
return $xmlToArr;
}
/*
XMLReader写XML文件
$path xml文件路径
$xmlTag 需要写入的数组元素标签
$rowTag 数据包含标签
$arr 二维数组
例:arrToXml('./sitemap.xml',['loc'],'url',[['loc'=>1],['loc'=>2]]);
*/
function arrToXml($path,$xmlTag,$rowTag,$arr){
$xml = new \XMLWriter();
$xml->openUri($path);//生成文件地址
$xml->setIndentString('');//设置缩进格式化使用的符号
$xml->setIndent(true);
$xml->startDocument('1.0', 'utf8');
$xml->startElement('urlset');
$xml->writeAttribute("xmlns","http://www.sitemaps.org/schemas/sitemap/0.9"); //设置标签属性
foreach($arr as $s) {
$xml->startElement($rowTag);
foreach($xmlTag as $x) {
$xml->startElement($x);
$xml->text($s[$x]);
$xml->endElement();
}
$xml->endElement();
}
$xml->endElement();
$xml->endDocument();
$xml->flush();
return true;
}