我有一个返回 xml 的函数,但返回的 xml 有两个
<?xml version="1.0"?>
标签
我无法通过一通电话修复该电话以返回它。我尝试使用 SimpleXMLElement,因此当我将此 xml 加载到 simplexml 中时,由于重复标签,它会给出错误。任何人都知道如何在加载到 xml 之前删除标签
我已经尝试过做
$new_xml = preg_replace('/<?xml(.*)?>(.*)?<\/?>/', '', $xml);
我也做了(顺便说一句,这是有效的。只是不确定这是否是最好的方法,因为我不确定有时是否会有更多信息)
$xml = str_replace('<?xml version="1.0"?>', '', $xml);
这将删除第一行直到结束 > 和尾随换行符。
<?php
$xml = "<?xml version=\"1.0\"?>\n\t<tag></tag>";
$xml = preg_replace('!^[^>]+>(\r\n|\n)!','',$xml);
echo $xml;
?>
它还适用于不兼容 1.0 版本的其他 XML 文件。
@AbsoluteƵERØ 的回答对我有帮助。
就我而言,我自己创建 XML。
$doc = new DOMDocument();
$doc->formatOutput = true;
$root = $doc->createElement('TAG1');
$doc->appendChild($root);
// ... some loop that inserts more children of TAG1 with attributes
$xml_file = 'relative/path/to/file.xml';
$doc->save($xml_file); // Here the XML file is saved along with the line that poses problems
// Read created XML
$t_xml = file_get_contents($xml_file);
// Remove first line
$t_xml = preg_replace('!^[^>]+>(\r\n|\n)!', '', $t_xml);
// Save into same file as original
file_put_contents($xml_file, $t_xml);
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;
$root = $doc->createElement('root');
$doc->appendChild($root);
$child = $doc->createElement('child', 'This is a child element');
$root->appendChild($child);
$xmlString = $doc->saveXML($doc->documentElement, LIBXML_NOXMLDECL);
echo $xmlString;