我正在使用它创建一个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)
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
没有替换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)
由于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)
尝试:
$xmlString = $doc->saveXML();
$xmlString = str_replace("<?xml version=\"1.0\"?>\n", '', $xmlString);
file_put_contents($filename, $xmlString);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28695 次 |
| 最近记录: |