如何使用混合内容来打印XML



所以我有一个辩论系统,用户应以以下格式发布其论点和反对:

<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可能是关键。但是我以前从未进入过,所以我还不确定。谁能确认并给我一个有用的指针?也许是一个例子?谢谢!

就像评论所说的那样,以下是dom行为的原因。以此示例为例:

<text><firstChar>E</firstChar>xample</text>

关闭firstChar标签后的休息时间/空格会更改含义并向用户显示。

XSLT处理器有些不同。它可以识别出更多可以破坏的情况,因此格式不同。如果您正在编写XSLT模板,则忽略XSLT标签之间的空格,而其他空格则将其解释为中断。xsl:text允许您按原样获得空间序列。但这对XML的节点不起作用。它们会像以前一样复制,因为否则含义可能会改变。

最新更新