无法绕过我的脑袋 - 为什么xmllint
抱怨这个dtd语法,特别是et_snote
行。 - 我在这里做错了什么?
<!ELEMENT et_snote (is_required?, (#PCDATA | vis? | ri?)*) >
<!ELEMENT is_required ( #PCDATA ) >
我收到此错误:
schema.dtd:166: parser error : expected '>'
<!ELEMENT et_snote (is_required?, ( #PCDATA | vis? | ri? )+) >
这是我运行的命令:
xmllint --noout --nowarning --nonet --dtdvalid schema.dtd my.xml
答案 0 :(得分:2)
您已将et_snote
的类型声明为元素内容,根据定义cannot have character data,可以删除#PCDATA
或将类型更改为混合内容。
答案 1 :(得分:-1)
我认为在使用或?
时,您不能使用|
之类的内容。它也没有意义,因为你说:&#34;你可以使用这三个元素中的任何一个,但是如果你使用的是第二个或第三个元素,你可以省略它&#34;。我假设你想让?and
ri`可选。因为你提供了替代品而且只想要一个元素,你可以说:
<!ELEMENT et_snode (is_required?, ( #PCDATA | vis | ri )+) >