删除<;?xml版本=";1.0“;php中XML的标记
我有一个返回xml的函数,但返回一个包含两个删除<;?xml版本=";1.0“;php中XML的标记,php,xml,xml-parsing,preg-replace,Php,Xml,Xml Parsing,Preg Replace,我有一个返回xml的函数,但返回一个包含两个 <?xml version="1.0"?> 标签 我无法通过一次呼叫来修复该呼叫。我试图使用SimpleXMLElement,所以当我将此xml加载到simplexml中时,由于标记重复,它会给出一个错误。有人知道如何在加载到xml之前删除标记吗 我已经试过了 $new_xml = preg_replace('/<?xml(.*)?>(.*)?<\/?>/', '', $xml); $new\u xm
<?xml version="1.0"?>
标签
我无法通过一次呼叫来修复该呼叫。我试图使用SimpleXMLElement,所以当我将此xml加载到simplexml中时,由于标记重复,它会给出一个错误。有人知道如何在加载到xml之前删除标记吗
我已经试过了
$new_xml = preg_replace('/<?xml(.*)?>(.*)?<\/?>/', '', $xml);
$new\u xml=preg\u replace(“/(.*)/”,“,”$xml);
我也做了(顺便说一句,这很有效。只是不确定这是否是最好的方法,因为我不确定是否有时会有更多的信息
$xml = str_replace('<?xml version="1.0"?>', '', $xml);
$xml=str_replace(“”,,$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=newDOMDocument();
$doc->formatOutput=true;
$root=$doc->createElement('TAG1');
$doc->appendChild($root);
//…某些循环插入更多具有属性的TAG1子级
$xml_file='relative/path/to/file.xml';
$doc->save($xml_file);//在这里,xml文件与引起问题的行一起保存
//读取创建的XML
$t\u xml=file\u get\u contents($xml\u file);
//删除第一行
$t_xml=preg_replace(“!^[^>]+>(\r\n |\n)!”,“$t_xml);
//保存到与原始文件相同的文件中
文件内容($xml\u文件,$t\u xml);
为什么不首先修复引入重复行的函数呢?我提到过,如果使用DOMDocument类创建XML文件,并且它生成无效的XML,那么它返回2,这一点我无法控制。可能是您硬编码了澄清:在said中案例删除是必要的。虽然DOMDocument创建的XML本身是完全有效的XML(无需删除),但该XML随后将下载到客户端浏览器,客户端必须将XML上载到某个政府网站。As(至少我们的)政府似乎并不严格遵守规则——在本例中是标准——他们的上传表单只接受.xml
,该表单以文档中定义的根元素开头。因此,要回答@IMSoP,确实出了问题,尽管不是我们的问题。