所以我有一个辩论系统,用户应该以下列格式发表他们的论点和反对意见:
<argument>Argument about something.
<objection>Objection to the argument.
<objection>Objection to the objection.</objection>
</objection>
<objection>Second objection to the argument.</objection>
</argument>
但我不能指望用户总是把它弄好,所以我需要一些方法来规范化/美化他们的输入。我尝试了标准方式:
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->loadXML('<argument>a<objection>b</objection></argument>');
$dom->formatOutput = true;
echo $dom->saveXml();
但不幸的是这输出:
<argument>a<objection>b</objection></argument>
显然,这是因为标准的PHP漂亮打印忽略了所有混合内容XML。我做了一些研究,我认为XSL可能是关键。但我以前从未接触过它,所以我还不确定。任何人都可以确认并给我一个有用的指针或两个?也许是一个例子?谢谢!
答案 0 :(得分:1)
与评论说的一样,这就是DOM表现出这种方式的原因。以此为例:
<text><firstChar>E</firstChar>xample</text>
结束firstChar
标记后的中断/空格会改变含义并显示给用户。
XSLT处理器有点不同。它可以识别更多可能破坏的情况,因此格式不同。如果您正在编写XSLT模板,则忽略XSLT标记之间的空格,而将其他空格解释为中断。 xsl:text
允许您按原样通过空格序列。但这不适用于XML中的节点。它们将按原样复制,否则意思可能会改变。