在php中创建xml时删除xml版本标记

Dhi*_*raj 27 php xml

我正在使用它创建一个xml

$customXML = new SimpleXMLElement('<abc></abc>');
Run Code Online (Sandbox Code Playgroud)

在为此添加一些属性后,当我尝试打印它时,它看起来像这样,

<?xml version="1.0"?>
<abc id="332"><params><param name="aa">33</param></params></abc>
Run Code Online (Sandbox Code Playgroud)

有没有办法删除xml版本节点?谢谢

Gor*_*don 39

理论上,您可以在保存文档时提供删除XML声明的LIBXML_NOXMLDECL选项,但这仅适用于Libxml> = 2.6.21(和buggy).另一种方法是使用

$customXML = new SimpleXMLElement('<abc></abc>');
$dom = dom_import_simplexml($customXML);
echo $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
Run Code Online (Sandbox Code Playgroud)

  • 小心,这是逃避非ASCI角色的enitites. (3认同)

Jon*_*Jon 12

一个实用的解决方案:你知道?>结果字符串中第一次出现的是xml版本子字符串的结尾.所以:

$customXML = new SimpleXMLElement('<abc></abc>');
$customXML = substr($customXML, strpos($customXML, '?'.'>') + 2);
Run Code Online (Sandbox Code Playgroud)

请注意,?>它分为两部分,因为否则一些不良的语法高亮显示器可能会在此时解析.


hrv*_*j3e 12

我对接受的答案有一个相似的解决方案:

如果你已经在变量中加载了xml:

$t_xml = new DOMDocument();
$t_xml->loadXML($xml_as_string);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
Run Code Online (Sandbox Code Playgroud)

对于磁盘中的XML文件:

$t_xml = new DOMDocument();
$t_xml->load($file_path_to_xml);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
Run Code Online (Sandbox Code Playgroud)

这条评论帮助:http://www.php.net/manual/en/domdocument.savexml.php#88525


Hit*_*_99 5

没有替换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);
Run Code Online (Sandbox Code Playgroud)

给出输出:

<abc id="332"><params><param name="aa">33</param></params></abc>
Run Code Online (Sandbox Code Playgroud)


hak*_*kre 5

由于SimpleXMLElement始终使用"\n"的XML-宣言从文档的其余部分分开,它可以在该位置进行分割,并采取剩余的空间:

explode("\n", $customXML->asXML(), 2)[1];
Run Code Online (Sandbox Code Playgroud)

例:

<?php

$customXML = new SimpleXMLElement('<!-- some comment -->
<abc>
</abc>');

echo explode("\n", $customXML->asXML(), 2)[1];
Run Code Online (Sandbox Code Playgroud)

输出:

<!-- some comment -->
<abc>
</abc>
Run Code Online (Sandbox Code Playgroud)


Sol*_*man 5

尝试:

$xmlString = $doc->saveXML();
$xmlString = str_replace("<?xml version=\"1.0\"?>\n", '', $xmlString);
file_put_contents($filename, $xmlString);
Run Code Online (Sandbox Code Playgroud)