如何解决xml中的空格问题?

ccnet 2003-06-13 05:00:31
初用xml,无法解决中文文章中段首空两格的问题,请问各位在xml中如何显示空格?
...全文
2904 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhhg 2003-06-15
  • 打赏
  • 举报
回复
up,up!
ccnet 2003-06-14
  • 打赏
  • 举报
回复
第一种情况明白,但是用不上,后两种不明白怎么回事。
可否弄个具体例子来看看。
beckhim 2003-06-14
  • 打赏
  • 举报
回复
看不很懂
有没有实例?谢谢啦
purexu 2003-06-14
  • 打赏
  • 举报
回复
如果是中文的话,用全角空格
如果是其它,可以用 
要不就用CSS,text-indent: 23pt;
duanliandl 2003-06-13
  • 打赏
  • 举报
回复
几种方法(转贴):
1、不要用符号替换任何字符串
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<root>
hello
world'
hello world
</root>

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:apply-templates select="/root"/>
</xsl:template>
<xsl:template match="root">
<xsl:for-each select=".">
<xsl:eval no-entities="t">parseXML(this.text)</xsl:eval>
</xsl:for-each>
<xsl:script language="javascript">
function parseXML(txt){
return(txt.replace(/[<]/g,"&lt;").replace(/\n/g,"<br>").replace(/\s/g,"&nbsp;"))
}
</xsl:script>
</xsl:template>
</xsl:stylesheet>

2、在元素内容中如何处理空白字符?

XML DOM 有三种访问元素文本内容的方式:

属性 行为
nodeValue 按照原始的 XML 源中指定的那样,返回 TEXT、CDATA、COMMENT 和 PI 节点上的原始文本内容(包括空白字符)。对于 ELEMENT 节点和 DOCUMENT 本身,则返回空值。
数据 与 nodeValue 相同
文本 重复连接指定子树中的多个 TEXT 和 CDATA 节点并返回组合结果。

注意: 空白字符包括新行、tab 和空格。

nodeValue 属性通常返回原始文档中的内容,与文档如何加载和当前 xml:space 范围无关。

文本属性连接指定子树中的所有文本并扩展实体。这与文档如何加载、preserveWhiteSpace 开关的当前状态和当前 xml:space 范围有关,请看如下所示:

preserveWhiteSpace = true when the document is loaded preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
保留 保留 保留 保留并截断

preserveWhiteSpace = false when the document is loaded preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
半保留 半保留并截断 半保留 半保留并截断


此处的保留表示和原始 XML 文档中完全相同的原始文本内容,截断意味着前导和尾部空格已经删除,半保留意味着保留了“重要的空白字符”并规范化了“不重要的空白字符”。重要的空白字符是文本内容内部的空白字符。不重要的空白字符是标记之间的空白字符,请看如下所示:

<name>\n
\t<first> Jane</first>\n
\t<last>Smith </last>\n
</name>
在本示例中,红色是可以忽略的不重要的空白字符,而绿色是重要的空白字符,因为它是文本内容的一部分,因此有不可忽略的重要含义。所以在本例中,文本属性返回下列结果:

状态 返回值
保留 "\n\t Jane\n\tSmith \n"

保留并截断 "Jane\n\tSmith"

半保留 " Jane Smith "

半保留并截断 "Jane Smith"


请注意“半保留”将规范化不重要的空白字符,例如,新行和 tab 字符将退化为单个空格。如果更改 xml:space 属性和 preserveWhiteSpace 开关,那么文本属性将返回相应的不同值。

CDATA and xml:space="preserve" subtree boundaries
在下面的例子中,CDATA 节点或“保留”节点的内容将得到连接,原因是它们不参与不重要的空白字符规范化。例如:

<name>\n
\t<first> Jane </first>\n
\t<last><![CDATA[ Smith ]></last>\n
</name>
在这种情况下,CDATA 节点内部的空白字符不再与“不重要”空白字符“合并”,并且不会截断。因此“半保留并截断”情况将返回下列内容:

"Jane Smith "
在此,</first> 和 <last> 标记之间的不重要的空白字符将包括在内,与 CDATA 节点的内容无关。如果用下列内容代替 CDATA,那么将返回相同结果:

<last xml:space="preserve"> Smith </last>
实体是特殊的

实体是作为 DTD 的一部分加载和分析的,并且显示在 DOCTYPE 节点下。它们不一定要有任何 xml:space 范围。例如:

<!DOCTYPE foo [
<!ENTITY Jane "<employee>\n
\t<name> Jane </name>\n
\t<title>Software Design Engineer</title>\n
</employee>">
]>
<foo xml:space="preserve">&Jane;</foo>
假定 preserveWhiteSpace=false(在 DOCTYPE 标记范围内),在分析实体时不重要的空白字符丢失。实体将不会有空白字符节点。树将类似于:

DOCTYPE foo
ENTITY: Jane
ELEMENT: employee
ELEMENT: name
TEXT: Jane
ELEMENT: title
TEXT>:Software Design Engineer
ELEMENT: foo
ATTRIBUTE: xml:space="preserve"
ENTITYREF: Jane

请注意,在 DOCTYPE 内部 ENTITY 节点下显露的 DOM 树不包含任何 WHITESPACE 节点。这意味着 ENTITYREF 节点的子节点也没有 WHITESPACE 节点,即使实体引用在 xml:space="preserve" 的范围内也是这样。

给定文档中引用的每个 ENTITY 的实例通常都有相同的树。

如果实体必须绝对保留空白字符,那么它必须在自己内部指定自己的 xml:space 属性,或者文档 preserveWhiteSpace 开关必须设置为 true。

3、<xsl:text> </xsl:text>
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>

8,907

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧