1、创建”学生信息.dtd”,根元素为”学生信息”,其子元素1到多个”学生”。各学生有属性”学号”为ID类型,该属性是必需的,学生元素有子元素”姓名”,”性别”,”年龄”,有序出现,均为可解析字符串类型,其中”姓名”,”性别”,”年龄”均出现一次。“姓名”有属性“曾用名”,该属性是可选的,字符串类型。由此DTD创建XML文档”学生信息.xml”创建2个学生的信息,并验证有效性。
时间: 2023-12-05 08:03:50 浏览: 32
首先,我们需要创建 DTD 文件 "学生信息.dtd",内容如下:
``` dtd
<!ELEMENT 学生信息 (学生+)>
<!ELEMENT 学生 (姓名, 性别, 年龄)>
<!ATTLIST 学生 学号 ID #REQUIRED>
<!ATTLIST 姓名 曾用名 CDATA #IMPLIED>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
```
然后,我们可以创建 XML 文件 "学生信息.xml",内容如下:
``` xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 学生信息 SYSTEM "学生信息.dtd">
<学生信息>
<学生 学号="1001">
<姓名 曾用名="张三">李四</姓名>
<性别>男</性别>
<年龄>20</年龄>
</学生>
<学生 学号="1002">
<姓名>王五</姓名>
<性别>女</性别>
<年龄>22</年龄>
</学生>
</学生信息>
```
最后,我们可以使用验证器验证 XML 文件的有效性,以下是验证代码:
``` java
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
import java.io.IOException;
public class ValidateXMLWithDTD {
public static void main(String[] args) {
String xmlFilePath = "学生信息.xml";
String dtdFilePath = "学生信息.dtd";
// 创建验证器工厂
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.DTD_NS_URI);
try {
// 创建验证器
Schema schema = factory.newSchema(new StreamSource(dtdFilePath));
Validator validator = schema.newValidator();
// 使用验证器验证 XML 文件
validator.validate(new StreamSource(xmlFilePath));
System.out.println("验证通过!");
} catch (SAXException | IOException e) {
e.printStackTrace();
}
}
}
```
如果 XML 文件通过了验证,控制台会输出 "验证通过!" 的信息。