Php 额外的空间是否会降低处理器的速度?

Php 额外的空间是否会降低处理器的速度?,php,xml,simplexml,whitespace,unset,Php,Xml,Simplexml,Whitespace,Unset,学习之后,我注意到使用PHP的unset()函数会留下制表符和空格。现在我在节点之间有一大块空白。我想知道PHP是否会遍历空格/返回/制表符,以及它是否会最终降低系统的速度 我还想问,是否有一个易于移除未设置的空间的方法 谢谢, 瑞安 添加注释: 这就是我在取消设置节点后删除空格的方式,它对我有效 $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom-&g

学习之后,我注意到使用PHP的unset()函数会留下制表符和空格。现在我在节点之间有一大块空白。我想知道PHP是否会遍历空格/返回/制表符,以及它是否会最终降低系统的速度

我还想问,是否有一个易于移除未设置的空间的方法

谢谢, 瑞安

添加注释:

这就是我在取消设置节点后删除空格的方式,它对我有效

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load($xmlPath);
$dom->save($xmlPath);

不管它是否会减慢这一过程:可能会让人不太在意

simpleXML就是这么简单。如果您需要“漂亮”的输出,DOM是您的朋友:

<?php
$xml = '
<xml>
        <node>foo </node>
        <other>bar</other>
</xml>';
$x = new SimpleXMLElement($xml);
unset($x->other);
echo $x->asXML();

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml);
$dom->documentElement->removeChild($dom->documentElement->lastChild);
echo $dom->saveXML();

它是否会减慢进程:可能会让人不太在意

simpleXML就是这么简单。如果您需要“漂亮”的输出,DOM是您的朋友:

<?php
$xml = '
<xml>
        <node>foo </node>
        <other>bar</other>
</xml>';
$x = new SimpleXMLElement($xml);
unset($x->other);
echo $x->asXML();

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml);
$dom->documentElement->removeChild($dom->documentElement->lastChild);
echo $dom->saveXML();

XML中的空白是TextNodes,例如

<foo>
    <bar>baz</bar>
</foo>

XML中的空白是TextNodes,例如

<foo>
    <bar>baz</bar>
</foo>

实际上,它是进行XML解析的,解析器读取的空白与输入流(或文件)中的其他字符相同。大多数PHP xml API都在幕后使用Libxml(XmlReader、XmlWriter、SimpleXml Xslt、Dom…)——其中一些API允许您访问空白(例如Dom、XmlReader),一些API则不允许(例如SimpleXml)

实际上,xml解析是由解析器进行的,空白与输入流(或文件)中的其他字符一样被解析器读取。大多数PHP xml API都在幕后使用Libxml(XmlReader、XmlWriter、SimpleXml Xslt、Dom…)-其中一些API允许您访问空白(例如Dom、XmlReader),而另一些API则不允许(例如SimpleXml)

快速回答问题:

我想知道PHP是否可以通过 空格/返回/选项卡以及是否 它最终会减慢速度 系统

不,PHP(或libxml)并没有真正迭代它。从理论上讲,有更多的空白会减慢系统的速度,尽管它太小,无法直接测量。您可以通过删除XML中的所有空白来测试这一点。这不会让它更快

我也在问是否有 易于清除未清理的空间 后面


恐怕不容易。您可以将SimpleXML内容导入DOM,并使用
formatOutput
完全重新构建空白,正如另一个答案中所建议的那样,或者您可以使用第三方库来完成此操作,但您找不到一种简单的内置方法来完成此操作。

快速回答问题:

我想知道PHP是否可以通过 空格/返回/选项卡以及是否 它最终会减慢速度 系统

不,PHP(或libxml)并没有真正迭代它。从理论上讲,有更多的空白会减慢系统的速度,尽管它太小,无法直接测量。您可以通过删除XML中的所有空白来测试这一点。这不会让它更快

我也在问是否有 易于清除未清理的空间 后面


恐怕不容易。您可以将SimpleXML内容导入DOM,并使用
formatOutput
完全重新构建空白,正如另一个答案中所建议的那样,或者您可以使用第三方库来为您完成此操作,但您找不到一种简单的内置方法。

您不是在暗示空白是一个标记?!;-)另外,Libxml可以区分空白节点和文本,事实上XMLReader有两种类型的空白。XPath当然是
//text()[normalize-space()=''''']
,但如果preserveWhiteSpace为false,则在加载时会删除这些节点。@Robin:我认为Gordon的意思是它们是实际的节点。@Robin
并不是暗示标记,但只是在标记之间有一个节点。对不起,如果这是误导的话。将其更改为一个希望不那么模棱两可的标记。你不是在暗示空白是一个标记?!;-)另外,Libxml可以区分空白节点和文本,事实上XMLReader有两种类型的空白。XPath当然是
//text()[normalize-space()=''''']
,但如果preserveWhiteSpace为false,则在加载时会删除这些节点。@Robin:我认为Gordon的意思是它们是实际的节点。@Robin
并不是暗示标记,但只是在标记之间有一个节点。对不起,如果这是误导的话。将其更改为希望不那么模棱两可的标记。将“property”替换为“pretty”,以避免对“凌乱”XML文档的正确性产生任何误解。这是否等同于unset$dom->documentElement->removeChild($dom->documentElement->lastChild);如果我只想格式化输出,我可以编辑这行吗?谢谢,RyanYes,这一行只是为了进行随机DOM操作,可以很容易地忽略。如果要格式化SimpleXML的输出,只需
将结果导入DOM并调用
saveXML
以进行一些漂亮的格式化,这种情况并不少见。我在尝试上述方法时遇到了此错误:警告:DOMDocument::loadXML()[DOMDocument.loadXML]:需要开始标记,“我没有无缘无故地说
import
。)。尝试在此处使用该函数:如果不起作用,请发布/粘贴一些您正在尝试的实际代码。将“正确”替换为“漂亮”,以避免对“混乱”XML文档的正确性产生任何误解。这是否等同于未设置$dom->documentElement->removeChild($dom->documentElement->lastChild);如果我只想格式化输出,我可以编辑这行吗?谢谢,RyanYes,这一行只是为了进行随机DOM操作,可以很容易地忽略。如果要格式化SimpleXML的输出,只需
将结果导入DOM并调用
saveXML
以进行一些漂亮的格式化,这种情况并不少见。我在尝试上述方法时遇到了此错误:警告:DOMDocument::loadXML()[DOMDocument.loadXML]:需要开始标记,“我没有无缘无故地说
import
。)。尝试在此处使用该函数:
$xml = <<< XML
<foo>
    <bar>baz</bar>
</foo>
XML;

$dom = new DOMDocument;
$dom->loadXML($xml);
foreach($dom->documentElement->childNodes as $node) {
    var_dump($node);
}
object(DOMText)#4 (0) {}
object(DOMElement)#6 (0) {}
object(DOMText)#4 (0) {}