我已经更新了我最初问题的标题和文本,在获得了更多关于真实情况的知识之后。我错误地将这种症状解释为空白不被保留,而真正发生的是HTML元素没有被解释为HTML。
我正在写一个从wadl文档到html的转换。我需要复制wadl的内容
<doc>
元素
同时保留空白,因为
<博士学位;
元素可以包含HTML元素,例如
<pre>
关心空白区
将命名空间更改为HTML时。
样品WADL
<博士学位;
元素:
<doc xml:lang="en" title="Some Representation">
Sample representation:
<pre><![CDATA[
<MyRoot>
<MyChild awesome="yes"/>
</MyRoot>
]]></pre>
</doc>
以下是我目前的转型方式:
<xsl:apply-templates select="wadl:doc"/>
...
<xsl:template match="wadl:doc">
<xsl:if test="@title">
<p><strong><xsl:value-of select="@title"/></strong></p>
</xsl:if>
<p><xsl:copy-of select="*|node()"/></p>
</xsl:template>
我看到的是
<预科;
要素
空白区折叠了吗
不被解释为
<预科;
元素,因此表示示例看起来异常。如何指示XSL输出
保留空白
在复制的内容时重写命名空间
<博士学位;
元素?或者这只是我选择
<博士学位;
元素?
更新
在勾选了这可能是一个输出名称空间问题之后,我创建了以下最小设置进行实验:
XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="doc_test.xsl"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
<doc>
<p>This is an HTML paragraph</p>
<pre>
And this
is a
preformatted
block of
text.
</pre>
</doc>
</application>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wadl="http://wadl.dev.java.net/2009/02">
<xsl:output
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="wadl:application">
<html>
<head>
<title>Doc Test</title>
</head>
<body>
<xsl:apply-templates select="wadl:doc"/>
</body>
</html>
</xsl:template>
<xsl:template match="wadl:doc">
<xsl:copy-of select="node()"/>
</xsl:template>
</xsl:stylesheet>
当我检查
<p>
或
<预科;
元素在firefox上,元素的名称空间指向wadl名称空间,它们不能正确地呈现为HTML(它们看起来像纯文本)。当我在chrome上做同样的操作时,名称空间是xhtml,元素呈现为适当的xhtml元素。
所以,我想,自从
<博士学位;
我的原始wadl文档的元素我没有显式地使用名称空间前缀,我需要找到一种强制
<博士学位;
要使用XHTML名称空间,或只需向的内容添加XHTML名称空间前缀。
<博士学位;
(更多的工作,但似乎是正确的方式)。