给定的代码是:
<?xml version="1.0" encoding="UTF-8"?>
<student id="12C042">
<fName>John</fName>
<lName>Nelson</lName>
<plan>
<courses year="3">
<course>
<name> Extensible Markup Language</name>
<shortName>XML</shortName>
<record>
<grade>30</grade>
<date>12-Jan-2017</date>
</record>
</course>
<course>
<name>Object Oriented Concepts and Unified Modeling Language</name>
<shortName><![CDATA[OOP & UML]]></shortName>
</course>
</courses>
</plan>
</student>
我需要为此生成一个DTD xml文件。
我做了一个代码:
<!ELEMENT student (fName,lName,plan)>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT plan (courses)>
<!ELEMENT courses (course?)>
<!ELEMENT course (name,shortName*,record*)>
<!ELEMENT name ANY>
<!ELEMENT shortName ANY>
<!ELEMENT record (grade,date)>
<!ELEMENT grade ANY>
<!ELEMENT date ANY>
<!ATTLIST student id NMTOKEN #REQUIRED>
<!ATTLIST courses year CDATA #IMPLIED>
它给我一个错误:
Error:
Public ID: null
System ID: file:/home/p/student.xml
Line number: 20
Column number: 13
Message: The content of element type "courses" must match "(course)".
error
答案 0 :(得分:0)
您目前对courses
的声明表示允许course
为零或一次(这就是?
的含义)。
您的XML有两个course
元素。
您需要将声明更改为允许course
零次或多次(*
)或一次或多次(+
)。
示例...
<!ELEMENT courses (course)*>
答案 1 :(得分:0)
元素类型courses
的内容必须与(course)
匹配,错误是由于代码不匹配所致。
该?
允许记录在xml
中出现零次或一次出现,因为它没有出现在第二个课程标签中。
因此,要解决此错误,请将课程dtd设置为<!ELEMENT course (name,shortName,record?)>
。
<!ELEMENT student (fName,lName,plan)>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT plan (courses)>
<!ELEMENT courses (course)>
<!ELEMENT course (name,shortName,record?)>
<!ELEMENT name ANY>
<!ELEMENT shortName ANY>
<!ELEMENT record (grade,date)>
<!ELEMENT grade ANY>
<!ELEMENT date ANY>
<!ATTLIST student id NMTOKEN #REQUIRED>
<!ATTLIST courses year CDATA #REQUIRED>
答案 2 :(得分:0)
尝试一下,它将起作用
<!ELEMENT student (fName,lName,plan*)>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT plan (courses*)>
<!ELEMENT courses (course+)>
<!ELEMENT course (name,shortName,record?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT shortName (#PCDATA)>
<!ELEMENT record (grade,date)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ATTLIST student id NMTOKEN #REQUIRED>
<!ATTLIST courses year CDATA #REQUIRED>