解析XML文件内容本质就是文件内容的读取Input
解析XML文件两种方式:
DOM解析(Document Object Model)
树结构处理方式
将文档全部解析 形成一个树结构 节点—-标签
优点 编程容易 缺点 必须将整个文档全部处理完毕(慢)
SAX解析(Simple Api for Xml)——-扩展
类似**流媒体方式
基于事件的模式 解析时候触发一系列事件
当某一个tag标签被解析的时候 激活后续的方法
优点 快(不需要将所有文档都一次性处理完)
缺点 编写很麻烦(复用性也不强)
JDOM(Java-based Document Object Model)
外部jar包 基于DOM方式 底层提升了性能
DOM4J(Document Object Model for Java)
外部jar包 基于JDOM方式 底层提升了性能
采用DOM方式 Document Object Model
1.需要一个工厂(建造工人)
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.利用工厂创建工人
DocumentBuilder builder = factory.newDocumentBuilder();
3.工人创建一个document对象(需要一张图纸 xml文件)
File file = new File(“src/testxml/school.xml”); 我们要解析的xml文件路径
Document document = builder.parse(file);
4.解析xml文件
获取根标签对象**(例如之前的school),有三种方式
①Element school = document.getDocumentElement();
②Element school = document.getElementById(“duyi”);//需要有dtd规则,通过id获取
③NodeList RootList = document.getElementsByTagName(“school”);
Element school = RootList.item(0);
根标签(例如school)中的子标签**(例如class)
①NodeList classList = document.getElementsByTagName(“class”);
②NodeList classList = school.getElementsByTagName(“class”);
③NodeList classList = school.getChildNodes();//需要有dtd规则,我们现在是知道只有一个直接子标签
for(int i=0;i<classList.getLength();i++){
//某一个class标签
Element classEle = (Element)classList.item(i);
String classID = classEle.getAttribute(“id”);
String className = classEle.getAttribute(“name”);
}
class标签的子标签teacher,已知获取某个class标签(classEle)
① Element teacher = (Element)classEle.getElementsByTagName(“teacher”).item(0);**
② Element teacher = (Element)classEle.getFirstChild();//需要有dtd规则
String teacherID = teacher.getAttribute(“id”);
String teacherName = teacher.getAttribute(“name”);
获取性别,性别标签包含的是文字
Element teacherSexEle = (Element)teacher.getElementsByTagName(“sex”).item(0);
String teacherSex = teacherSexEle.getTextContent();