PHP中的XSLTProcessor始终删除空白
我正在尝试使用XSLTProcessor将一些XML和XSLT样式表组合到一个html文件中。 但是,它总是在一行中输出html 例如,我的XSLT:PHP中的XSLTProcessor始终删除空白,php,xslt,whitespace,Php,Xslt,Whitespace,我正在尝试使用XSLTProcessor将一些XML和XSLT样式表组合到一个html文件中。 但是,它总是在一行中输出html 例如,我的XSLT: <p> <strong>my sheet</strong> this is <strong>my</strong> <em>style</em> </p> 我的工作表 这是我的风格 变成: <p><strong
<p>
<strong>my sheet</strong>
this is <strong>my</strong> <em>style</em>
</p>
我的工作表
这是我的风格
变成:
<p><strong>my sheet</strong>this is <strong>my</strong><em>style</em></p>
我的工作表这是我的风格
我正在使用:
<xsl:preserve-space elements="*" />
<xsl:output method="html" version="4.0" encoding="iso-8859-1" indent="yes"/>
但我想保留我的html原样。
任何人都知道吗?保留空间处理数据文件中元素及其内容的处理,并且不影响脚本的解析方式。简而言之,你不能,也不应该 如果有明显的空白(例如,两个跨距之间需要一个空格,以防止单词一起运行),则可以使用
将其添加进来。如果没有明显的空白(例如,.space…
),则不应尝试将其添加到中
XML是用来精确、可靠地将文档树从一个程序传输到另一个程序的,而美观绝不是其工作的一部分。XSLT不会添加空格,因为它不知道在哪里可以安全地添加空格,也不会删除空格,因为它不知道在哪里可以使用空格。记住XSLT对HTML一无所知;它是独立于标记语言的。要执行您想要的操作,XSLT需要知道它可以在块元素(h1
,p
等)周围放置空格,但不能在跨距周围放置空格,否则您可能会得到浮动标点:
my cunning paragraph with
<span>text</span>
, and more
我的狡猾段落
文本
,等等
上述输出显然是不可接受的。因为XSLT不知道哪些元素是安全的,哪些元素是不安全的,所以XSLT的观点显然是正确的,并且不会为了一些漂亮的打印而冒险对数据进行错误处理
XML不是手工编写的,也不是作为原始数据读取的。不要尝试。在Firefox中打开XML输出,它就可以为您进行格式化,如果您希望这样做,可以在另一个应用程序中进行
为了完整性,实际上有一种安全的方法可以在不影响间距的情况下进行漂亮的打印:
<root
><h1>The correct way of handling pretty-printing with XML</h1
><p
>A test paragraph with a <span
>span</span
>, which won't break</p
></root
>
使用XML处理漂亮打印的正确方法一段带有跨度的测试段落,不会中断
>
最后,杀死ISO-8859-1。它一定会死的。尽量避免
h1
内部p
保留空间处理数据文件中的元素及其内容,并且不影响脚本的解析方式。简而言之,你不能,也不应该
如果有明显的空白(例如,两个跨距之间需要一个空格,以防止单词一起运行),则可以使用
将其添加进来。如果没有明显的空白(例如,.space…
),则不应尝试将其添加到中
XML是用来精确、可靠地将文档树从一个程序传输到另一个程序的,而美观绝不是其工作的一部分。XSLT不会添加空格,因为它不知道在哪里可以安全地添加空格,也不会删除空格,因为它不知道在哪里可以使用空格。记住XSLT对HTML一无所知;它是独立于标记语言的。要执行您想要的操作,XSLT需要知道它可以在块元素(h1
,p
等)周围放置空格,但不能在跨距周围放置空格,否则您可能会得到浮动标点:
my cunning paragraph with
<span>text</span>
, and more
我的狡猾段落
文本
,等等
上述输出显然是不可接受的。因为XSLT不知道哪些元素是安全的,哪些元素是不安全的,所以XSLT的观点显然是正确的,并且不会为了一些漂亮的打印而冒险对数据进行错误处理
XML不是手工编写的,也不是作为原始数据读取的。不要尝试。在Firefox中打开XML输出,它就可以为您进行格式化,如果您希望这样做,可以在另一个应用程序中进行
为了完整性,实际上有一种安全的方法可以在不影响间距的情况下进行漂亮的打印:
<root
><h1>The correct way of handling pretty-printing with XML</h1
><p
>A test paragraph with a <span
>span</span
>, which won't break</p
></root
>
使用XML处理漂亮打印的正确方法一段带有跨度的测试段落,不会中断
>
最后,杀死ISO-8859-1。它一定会死的。尽量避免
h1
内部p
ISO-8859-1有什么问题?(假设您知道您将使用欧洲字符)因此无法实现此功能:
?您永远不会知道您将只使用少数几种欧洲语言的字符。只要有人从办公室复制并粘贴一段卷曲的引文。大多数欧洲语言没有得到适当的覆盖;即使是英语也不完全正确。一位用户发表了他对自己的Œdipus情结的评论?哦,不是拉丁语1。使用XML处理器不需要支持的有缺陷的编码,而不是标准要求的更简单、支持更好的编码,这是愚蠢的。Latin-1文档应该是一个遗留问题,而不是一个日益严重的问题。正如我所说的:放入
。这是一个重要的空白,它的重要性足以让您需要使用XSLT指令来添加它。它仍然会在一条线上运行,但这很好。如果您通过指示XSLT输出该文本来告诉XSLT您希望它出现在那里,那么空间就会被保留下来。(同时,我也为您的咆哮道歉,但是这个问题经常出现,并且有点让我感到不舒服。)ISO-8859-1有什么问题吗?(假设您知道您将使用欧洲字符)因此无法实现此功能:
?您永远不会知道您将只使用少数几种欧洲语言的字符。只要有人从办公室复制并粘贴一段卷曲的引文。大多数欧洲语言没有得到适当的覆盖;即使是英语也不完全正确。一位用户发表了他对自己的Œdipus情结的评论?哦,不是拉丁语1。相反,使用XML处理器不需要支持的有缺陷的编码是愚蠢的