如何在元素中使用忽略html的模式,而不是尝试验证它的验证器
<stuff>
<data>
this is some text <b>with the odd</b> bit of html<p>and unclosed tags
</data>
</stuff>
这不是有效但我尝试过像
这样的事情datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes"
start = stuff
stuff = element stuff
{
element data { * }
}
答案 0 :(得分:1)
您无法在XML中允许任意未修改的HTML。可以转义单个特殊字符(What are the official XML reserved characters?)或将HTML封装在CDATA容器(Is it possible to insert HTML content in XML document?)中。
答案 1 :(得分:1)
您将无法验证其中包含格式不正确的HTML的XML文档,因为由于格式不正确,此类文档不是XML文档。但实际上,如果您获得的输入是XML,那么您当然可以定义data
以允许任何格式良好的HTML元素或任何格式良好的XML。
允许任何格式良好的XML是最简单的。我们定义一个模式而不是“这里任何格式良好的XML”:遇到的任何元素都是使用相同的模式验证的,递归地:
wellformed-xml = (text
| element * { wellformed-xml }
)*
现在定义data
元素以使用该模式:
stuff = element stuff {
element data { wellformed-xml }
}
如果你真的想确保它只是HTML,那么你需要一个比“*”更严格的名称类。我已使用b
,i
,p
,span
和div
对其进行填充,并将其作为练习添加其他元素你想要的。
start = stuff
stuff =
element stuff {
element data { wellformed-html }
}
wellformed-html =
(text
| element b | div | i | p | span { wellformed-html }
)*
如果您也希望能够支持XHTML输入,那么您将需要使用命名空间引用;再次,为读者练习。