【发布时间】:2012-05-02 14:11:11
【问题描述】:
我正在为我的大学计算俱乐部准备一篇关于 XML 和 XSLT 的简报,我不是专家,但我比任何人都好,而且它只是一个 1 小时的入门。 所以对于我的幻灯片,我想我会使用 XML 文档。 然后我会用 XSLT 2.0 将其变成一系列网页
所以我们有我的源文件
<slideshow>
<slide title="Example">
<para>Below is an example of an XML document</para>
<code> <![CDATA[
<?xml version="1.0"?>
<elephant Name="Fido">
<head>
<eyes qty="2" colour="blue"/>
<trunk/>
<ears qty="2"/>
</head>
<body>
Thin, ribs showning
</body>
<legs qty="4">
Roughly 1.5m Long
</legs>
</elephant> ]]>
</code>
</slide>
</slideshow>
因为我不希望我的示例构成文档的 XML 结构的一部分,(并且不希望它们被 XSLT 更改)
我有 CDATA 部分。
所以,每次我有一个<code>...</code> 元素时,它总是写成:
<code><![CDATA[...]]></code>
这是信息的重复。
我可以声明每个code 元素只包含(未解析的)字符数据吗?
所以我只写<code>...</code>,它永远不会尝试解析里面的内容。
似乎可以用 DTD 完成一些事情,也许?
我正在寻找的答案是
使用
<!DECLARE-CDATA-ELEMENT code> 会生成代码元素,而不是解析它们的内容。
你可以用实体来模拟它:
<!ENTITY CodeStart "<code><![CDATA[">
<!ENTITY CodeEnd "]]></code>">
然后使用:&CodeStart;<don'tParse/>&CodeEmd;
不,不能这样做,但您可以通过...强制所有代码段不包含子元素
不,但您可以像这样进行预处理:...
这些不是答案,它们只是表明答案可能是什么样的 (希望现在更清楚)
【问题讨论】:
-
不,CDATA 部分之外的标记是常规标记。我不明白为什么你认为让你的代码示例 insifde CDATA 是“信息的重复”......你能解释一下什么是重复的吗?另一种可能性是将样本放在 cmets 中。
-
它是重复的,因为将它放在
code元素中应该(具有code元素的正确定义)意味着它是 CDATA。请注意,我并不是说 XML 应该将code视为特殊关键字。我在问如何使它将代码视为特殊关键字。重复的是,从来没有一个code标签后面没有CDATA标签。 -
对不起,我一个字都听不懂你在说什么。为什么您认为应该重新编写 W3C XML 规范以纳入您的关于什么是正确的和什么不正确的想法?关于 XML 只有一个正确性——这就是 W3C 规范中所写的内容。
-
如果您希望 不 使用任何 CDATA 部分并且仍然将您的示例视为文本,您必须将示例中的每个
&lt;和&amp;字符转义为,分别为&lt;和&amp; -
确实,我似乎没能说清楚。我并不是说 XML 规范有什么问题。我问这个问题是因为我知道我并不完全了解它(我对 DTD 几乎一无所知)