清除xml标记中的换行符和所有不必要的空白


Clear newlines and all unnecessary whitespaces in xml tags

我需要所有XML标记适合一行( clear newlines);如果可能的话,我希望清除所有其他不必要的空白,但这并不重要。

我需要这个清空的原因是:
我使用DOMDocument::schemaValidate()根据XSD模式验证XML。该函数返回带有行号的错误,并且这些行号与我在其中显示结果的编辑器中编号的行号不匹配(因为验证器忽略标记中的换行符,而编辑器不会)。

我发现了很多关于使用regexp在两个特定分隔符之间匹配字符串的问题和答案,但不用于在两个分隔符之间匹配一些特定字符。我发现最接近的是:从XML标签中删除空白,但我无法在php中实现这一点。

示例:给定字符串

<package xmlns="http://www.idpf.org/2007/opf" 
    version=""
    unique-identifier=""
    prefix="optional"
    lang="optional"
    dir="optional"
    id="optional"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.idpf.org/2007/opf http://fpierrat.fr/mvs/epub3-opf.xsd"
>

我需要删除标签名和属性之间的所有换行符(如果可能的话,还有所有额外的制表符和额外的空格)。输出应该如下所示:

<package xmlns="http://www.idpf.org/2007/opf" version="" unique-identifier="" prefix="optional" lang="optional" dir="optional" id="optional" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.idpf.org/2007/opf http://fpierrat.fr/mvs/epub3-opf.xsd" >

只影响<>之间的空白。标签内容保持原样。
谢谢你的帮助。

您不需要正则表达式,只需使用DOMDocument::saveXML。


例子:

$xml = <<<'XML'
<package xmlns="http://www.idpf.org/2007/opf"
    version=""
    unique-identifier=""
    prefix="optional"
    lang="optional"
    dir="optional"
    id="optional"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.idpf.org/2007/opf http://fpierrat.fr/mvs/epub3-opf.xsd"
>
<foo>
    look at my
    fancy
    whitespace
</foo>         <bar/>
</package>
XML;
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->saveXML();

输出:

<?xml version="1.0"?>
<package xmlns="http://www.idpf.org/2007/opf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="" unique-identifier="" prefix="optional" lang="optional" dir="optional" id="optional" xsi:schemaLocation="http://www.idpf.org/2007/opf http://fpierrat.fr/mvs/epub3-opf.xsd">
<foo>
    look at my
    fancy
    whitespace
</foo>         <bar/>
</package>