【发布时间】:2016-01-05 17:44:27
【问题描述】:
我需要将所有 XML 标记放在一行中(ie 清除换行符);如果可能的话,我想清除所有其他不必要的空格,但这并不重要。
我需要这种清理的原因是:
我正在使用DOMDocument::schemaValidate() 针对 XSD 架构验证 XML。该函数返回带有行号的错误,这些行号与我在其中显示结果的编辑器中编号的行号不匹配(因为验证器会忽略标签中的换行符,而编辑器不会)。
我发现了很多关于使用正则表达式在两个特定分隔符之间匹配字符串的问题和答案,但不适用于在两个分隔符之间匹配 一些 特定字符。我找到的最接近的是:Remove whitespace from XML tags 但我无法在 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" >
只有封闭的<和>之间的空格会受到影响。标签内容应该保持原样。
提前感谢您的帮助。
【问题讨论】: