删除<?xml version="1.0" tag from XML in php

问题描述 投票:0回答:3

我有一个返回 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-parsing preg-replace
3个回答
1
投票

这将删除第一行直到结束 > 和尾随换行符。

<?php
$xml = "<?xml version=\"1.0\"?>\n\t<tag></tag>";

     $xml = preg_replace('!^[^>]+>(\r\n|\n)!','',$xml);

echo $xml;
?>

它还适用于不兼容 1.0 版本的其他 XML 文件。


0
投票

@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);


0
投票

使用 LIBXML_NOXMLDECL

$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;
© www.soinside.com 2019 - 2024. All rights reserved.