我正在编写自己的模板引擎,主要用于Web应用程序。
实际上是我自己的XML标签和HTML的混合。
以下是样本:
<lp:view xmlns:lp="http://sminit.com/view" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://sminit.com/view view.xsd ">
<lp:list name="my_items">
<lp:list_header>
<table>
</lp:list_header>
<lp:list_item>
<tr><td>$title$</td></tr>
</lp:list_item>
<lp:list_footer>
</table>
</lp:list_footer>
</lp:list>
</lp:view>
一点解释: 那些以“lp”为前缀的标签属于我的模板引擎,并且是一种“处理指令”。 lp:view是一个根节点,然后有一个lp:list节点收到一些数据源会生成一个列表:首先它将包含lp:list_header的内容,然后重复lp:list_item的适当时间内容(替换$ title $ by actual data,但这并不重要),然后它将添加lp:list_footer节点的内容。正如您所看到的,出于这个原因,我在标签上分配了html标签“table”。
我遇到了两个主要问题: 1. Eclipse抱怨“表”没有正确关闭 - 我希望Eclipse停止抱怨,将此标记视为文本或 - 也许你可以建议一些东西? 2.如果我在任何html标签内,Eclipse将不会显示任何代码提示。 (代码提示:此标记可能使用的属性,如“class”或“id”等)
我知道我在问一个奇怪的怪物问题,但也许这里有一些XSD大师可以指导我: Eclipse应该将我的xml模板文件视为以下内容: 1.标有前缀“lp”的标签是众神!它们优先于其他任何东西。只应显示该标记的错误(缺少必需的属性,缺少必需的子元素等)。 2.所有其他标签(尖括号之间的任何内容)都是HTML标签。 Eclipse应该为它们显示代码提示,但是应该是“不正确”(就像在我的示例中:没有关闭/表标记) - Eclipse不应该抱怨。
我希望这是可能的。
谢谢!
答案 0 :(得分:0)
您必须在CDATA
块中包装HTML。这将使XML解析器将内容(未闭合的<table>
)视为纯文本,而不是破坏的标记。
<lp:list_header><![CDATA[
<table>
]]></lp:list_header>
答案 1 :(得分:0)
这只是一个部分答案,但我仍然会将其作为答案,因为输入评论太长了。
要阻止Eclipse抱怨未关闭的标记,您应该将内容包装在<![CDATA[..]]
部分中,如下所示:
<lp:view xmlns:lp="http://sminit.com/view" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://sminit.com/view view.xsd ">
<lp:list name="my_items">
<lp:list_header>
<![CDATA[ <table> ]]>
</lp:list_header>
<lp:list_item>
<tr><td>$title$</td></tr>
</lp:list_item>
<lp:list_footer>
<![CDATA[ </table> ]]>
</lp:list_footer>
</lp:list>
它们将被视为文本,Eclipse不会抱怨,但在这种情况下,您将丢失CDATA部分内的任何Eclipse完成。
为了完成HTML标记的工作,我认为您可以尝试将XHTML的默认命名空间添加到根标记中,如下所示:
<?xml version="1.0" ?>
<lp:view xmlns="http://www.w3.org/1999/xhtml" xmlns:lp="http://sminit.com/view" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://sminit.com/view view.xsd ">
<lp:list name="my_items">
<lp:list_header>
<![CDATA[ <table> ]]>
</lp:list_header>
<lp:list_item>
<tr><td>$title$</td></tr>
</lp:list_item>
<lp:list_footer>
<![CDATA[ </table> ]]>
</lp:list_footer>
</lp:list>
编辑:我认为第二部分不起作用,因为XHTML模式定义了根元素应该是<html>
。我刚刚在Eclipse中尝试过,当我第一次在文档中的某处插入<html>
标记时,HTML标记的完成才开始工作。也许其他人可以权衡。