0

我怎样才能有一个模式忽略元素中的 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 { * }
}
4

2 回答 2

1

您不能在 XML 中允许任意未修改的 HTML。转义单个特殊字符(什么是官方 XML 保留字符?)或将 HTML 封装在 CDATA 容器中(是否可以在 XML 文档中插入 HTML 内容?)。

于 2016-05-23T23:27:24.920 回答
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 输入,您将需要使用名称空间引用;再次,为读者做一个练习。

于 2016-06-03T21:06:13.817 回答