删除XML版本标签时,在PHP
我使用这个删除XML版本标签时,在PHP
$customXML = new SimpleXMLElement('<abc></abc>');
创建XML创建一个XML增加一些属性在此之后,当我尝试打印它看起来像这样 ,
<?xml version="1.0"?>
<abc id="332"><params><param name="aa">33</param></params></abc>
有没有办法去除xml版本节点? 谢谢
理论上,您可以在保存文档时提供LIBXML_NOXMLDECL
option以删除XML声明,但仅在Libxml> = 2.6.21(和buggy)中可用。另一种方法是使用
$customXML = new SimpleXMLElement('<abc></abc>');
$dom = dom_import_simplexml($customXML);
echo $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
一个切实可行的解决方案:您知道结果字符串中第一次出现?>
将会是xml版本子字符串的结尾。所以:
$customXML = new SimpleXMLElement('<abc></abc>');
$customXML = substr($customXML, strpos($customXML, '?'.'>') + 2);
注意?>
被分成两个部分,否则一些语法高亮差可能在这一点上解析的问题。
如果这是一个问题,这应该这样做:
$xml = str_replace(' version="1.0"', '', $xml);`
XML标题标签和PHP短标记是不相容的。所以,这可能是在PHP中使用短标签的问题(即<?=
而不是<?php echo...
)。因此,关闭PHP.INI中的短标签(并适当更新您的代码)可能会解决此问题。
有没有更换XML头的另一种方式。我喜欢这样的:
$xml = new xmlWriter();
$xml->openMemory();
$xml->startElement('abc');
$xml->writeAttribute('id', 332);
$xml->startElement('params');
$xml->startElement('param');
$xml->writeAttribute('name', 'aa');
$xml->text('33');
$xml->endElement();
$xml->endElement();
echo $xml->outputMemory(true);
给出输出:
<abc id="332"><params><param name="aa">33</param></params></abc>
我有一个simmilar解决了接受的答案:
如果您对XML媒体链接加载一个变量:
$t_xml = new DOMDocument();
$t_xml->loadXML($xml_as_string);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
对于来自磁盘的XML文件:
$t_xml = new DOMDocument();
$t_xml->load($file_path_to_xml);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
这个评论帮助:http://www.php.net/manual/en/domdocument.savexml.php#88525
由于SimpleXMLElement
总是使用"\n"
到XML的宣言从文档的其余部分分开,它可以在该位置进行分割,并采取其余:
explode("\n", $customXML->asXML(), 2)[1];
实施例:
<?php
$customXML = new SimpleXMLElement('<!-- some comment -->
<abc>
</abc>');
echo explode("\n", $customXML->asXML(), 2)[1];
输出:
<!-- some comment -->
<abc>
</abc>
尝试:
$xmlString = $doc->saveXML();
$xmlString = str_replace("<?xml version=\"1.0\"?>\n", '', $xmlString);
file_put_contents($filename, $xmlString);
这对我需要做的事很好。 – Chad 2016-01-23 05:31:23
echo preg_replace("/<\\?xml.*\\?>/",'',$doc->saveXML(),1);
这几乎就是我正在做的。我的解决方案:'return preg_replace(“/ /”,“”,$ doc-> asXml());'' – 2016-12-20 20:57:27
$customXML = new SimpleXMLElement('<source><abc>hello</abc></source>');
$result = $customXML->xpath('//abc');
$result = $result[0];
var_dump($result->asXML());
整个序言或只是版本信息? – Gordon 2011-05-10 09:10:18
整个序言 – Dhiraj 2011-05-10 09:11:54
为什么?这可能毫无意义,但不应该造成任何伤害。 – Quentin 2011-05-10 09:12:58