有没有一种标准方法可以说明单个XML元素中的空格是否重要?

时间:2013-08-02 09:57:29

标签: php xml domdocument dtd

有时,在将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>)表示内联元素,并且它们之间的空白区域很重要,或手动将特定元素标记为包含混合内容?

2 个答案:

答案 0 :(得分:0)

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

示例:

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

我没有在PHP中尝试这个。

答案 1 :(得分:0)

如果你想要空白是重要的,为什么你在使用formatOutput=true?不要再咬自己的鼻子了,鼻子最终可能会止血。