前端之家收集整理的这篇文章主要介绍了
根据Schema文件编写xml并解析xml文件,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
conf.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="学生名册">
<!-- 根元素为学生名册,它包含了若干个学生,所以学生名册一定是一个complexType,一定是个复杂类型 -->
<xs:complexType>
<!--学生名册里面有多个学生,所以可以用sequence-->
<!--每个sequence里面就一个元素:学生,而且它可以不断重复,0次或者多次-->
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="学生">
<!-- 因为学生也是一个复杂的类型 -->
<xs:complexType>
<xs:sequence>
<xs:element name="姓名" type="xs:string"/>
<!-- 性别使用简单类型 -->
<xs:element name="性别">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- 年龄也是一个简单类型 -->
<xs:element name="年龄" >
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<学生名称 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="conf.xsd">
<学生 学号="1">
<姓名>张三</姓名>
<性别>男</性别>
<年龄>23</年龄>
</学生>
<学生 学号="2">
<姓名>李四</姓名>
<性别>女</性别>
<年龄>24</年龄>
</学生>
<学生 学号="3">
<姓名>王五</姓名>
<性别>男</性别>
<年龄>25</年龄>
</学生>
</学生名称>
文件的解析:
package kw.java;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.AbstractAttribute;
public class ReadXMlDemo {
static String Xmlname = "conf/test.xml";
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
File file = new File(Xmlname);
//读取文档实体
Document doc = reader.read(file);
/*//获得指定路径下的所有节点
List list = doc.selectNodes("//学生");
for(Iterator it = list.iterator();it.hasNext();){
//获得具体的row元素
Element element = (Element)it.next();
//获得所有的属性
List eList = element.attributes();
for(Iterator iter1 = eList.iterator();iter1.hasNext();){
//将每个属性转化为一个抽象属性,然后获取其名字和值
AbstractAttribute aa = (AbstractAttribute)iter1.next();
System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue());
}
}*/
//获得跟元素
Element root = doc.getRootElement();
//得到所有的子元素
List<Element> list = root.elements();
}
}