XML DTD父对象与子对象相同
举个例子。在我的xml中XML DTD父对象与子对象相同,xml,dtd,Xml,Dtd,举个例子。在我的xml中 <?xml version="1.0"?> <!DOCTYPE expression SYSTEM "task3-1.dtd"> <expression> <left-bracket>(</left-bracket> <expression> <left-bracket>(</left-bracket> <expression>
<?xml version="1.0"?>
<!DOCTYPE expression SYSTEM "task3-1.dtd">
<expression>
<left-bracket>(</left-bracket>
<expression>
<left-bracket>(</left-bracket>
<expression>
<number>24</number>
<operation>+</operation>
<number>24</number>
</expression>
<right-bracket>)</right-bracket>
<operation>*</operation>
<number>5</number>
</expression>
<right-bracket>)</right-bracket>
<operation>-</operation>
<number>6</number>
</expression>
(
(
24
+
24
)
*
5.
)
-
6.
当我尝试运行dtd时,总是出现以下错误:
元素“表达式”的子元素“number”无效。预期的可能元素列表:“左括号”
<!ELEMENT expression (left-bracket+,right-bracket,operation,number+)>
<!ELEMENT left-bracket (#PCDATA)>
<!ELEMENT right-bracket (#PCDATA)>
<!ELEMENT operation (#PCDATA)>
<!ELEMENT number (#PCDATA)>
根据DTD,元素必须包含以下序列:
元素,后跟
元素,后跟
元素,后跟
元素
内容模型的这一行所声明的:
(left-bracket+,right-bracket,operation,number+)
由于您的实例在
之后有一个
元素(而不是
或另一个
),因此验证失败
错误消息指的是
元素,该元素也不能出现在
内的该位置。根据DTD,可能存在多个
元素(一个是必需的),但仅在所有其他元素之后
如果要创建XML文件以遵守DTD的规则,则必须更改文档结构。如果您实际上是在设计DTD来表示希望在文档中验证的某些规则,那么您必须决定如何表示数据。例如,expression
元素的内容模型设计方式不允许嵌套表达式
此DTD验证您的实例并允许嵌套表达式(当然,它可能不是您想要的-我基于对文档结构的快速查看):
一个选项是将所有内容设置为
?
(零或一)
此处答案可能重复,对该问题没有任何帮助。请移除您向我们展示的一些XML;您向我们展示了一些DTD;正如验证器告诉您的,XML对DTD无效。你的问题是什么?我在元素“expression”中仍然有一个错误,它的子元素“expression”无效是的。DTD不允许嵌套的
元素。您必须决定哪些是DTD的规则。我在上面提出了一些建议,但我可能错了,因为我不知道你想要实现什么的细节。验证时不要出错。但是您的代码仍然存在相同的错误。您的源代码使用我提供的DTD进行验证。可能您正在使用的XML文档与您发布的XML文档不完全相同。
<!ELEMENT expression ( ( (left-bracket,expression+,right-bracket)*,(operation,number)* ) | (number,operation,number) )>
<!ELEMENT left-bracket (#PCDATA)>
<!ELEMENT right-bracket (#PCDATA)>
<!ELEMENT operation (#PCDATA)>
<!ELEMENT number (#PCDATA)>
<!ELEMENT expression (left-bracket?,expression?,right-bracket?,number?,operation?,number?)>
<!ELEMENT left-bracket (#PCDATA)>
<!ELEMENT right-bracket (#PCDATA)>
<!ELEMENT operation (#PCDATA)>
<!ELEMENT number (#PCDATA)>