有时,在将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>​</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>
)表示内联元素,并且它们之间的空白区域很重要,或手动将特定元素标记为包含混合内容?
答案 0 :(得分:0)
您可以尝试将元素声明为具有混合内容(元素和#PCDATA
)。您必须在td
级别执行此操作,而不是i
或b
级别。
示例:
<!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
?不要再咬自己的鼻子了,鼻子最终可能会止血。