1

有时,在将 XML 解析为 PHP 的 DOMDocument 并使用 输出时formatOutput=true,会在不需要的 XML 标记之间引入空格。

例如:

<td><i>lorem</i><b>ipsum</b></td>

变成了这个,这在两个单词之间添加了空格:

<td>
    <i>lorem</i>
    <b>ipsum</b>
</td>

解决此问题的一种方法是在元素末尾手动添加一个零宽度空格,以便解析器将元素的内容视为混合内容:

<td><i>lorem</i><b>ipsum</b>&#8203;</td>

还有一个xml:space="preserve"属性,它应该使解析器将所有空白视为重要的,但在这种情况下它似乎没有任何效果:

<?php

$dom = new DOMDocument;
$dom->loadXML('<td xml:space="preserve"><i>lorem</i><b>ipsum</b></td>');
$dom->formatOutput = true;
print $dom->saveXML();

/* Output:
<?xml version="1.0"?>
<td xml:space="preserve">
  <i>lorem</i>
  <b>ipsum</b>
</td>
*/

有没有办法(可能使用 DTD)告诉 XML 解析器/编写器某些标签(<i><b>这种情况下)表示内联元素并且它们之间的空白很重要,或者手动将特定元素标记为包含混合内容?

4

2 回答 2

0

如果你想让空白很重要,你到底为什么要使用formatOutput=true?!停止打自己的鼻子,你的鼻子最终可能会止血。

于 2013-08-13T16:55:19.100 回答
0

您可以尝试将元素声明为具有混合内容(元素和#PCDATA)。您必须在td级别而不是iorb级别执行此操作。

例子:

<!DOCTYPE td [
<!ELEMENT td (#PCDATA|i|b)*>
<!ELEMENT i (#PCDATA)>
<!ELEMENT b (#PCDATA)>
]>
<td><i>lorem</i><b>ipsum</b></td>

我没有在 PHP 中尝试过这个。

于 2013-08-06T15:42:12.830 回答