package xmlTest;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class XmlTest {
@Test
public void test() throws DocumentException{
//1.创建SAXReader对象reader
SAXReader reader = new SAXReader();
//2.reader对象关联指定xml文件,创建Document
Document document = reader.read("src\person.xml");
//3.获取根节点
Element root = document.getRootElement();
//4.通过根节点获取子节点
@SuppressWarnings("unchecked")
List<Element> elements = root.elements("person");
//5.遍历子节点,并输出
for(Element person:elements){
//获取子节点中的属性
String id = person.attributeValue("id");
//获取子节点中的内容
Element nameElement = person.element("name");
Element ageElement = person.element("age");
Element scoreElement = person.element("score");
System.out.println(id+" "+nameElement.getText()+" "+ageElement.getText()+" "+scoreElement.getText());
}
}
}
//TVSCHEDULE.dtd dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是xml中的注释 xml用法 :由于实际工作中 可能会出现互相传递一组数据的情况直接传递数据文件 传统的数据文件可读性较差 并且需要io流解析所以创建了xml版本的数据文件现在认为不仅xml可以用于互相传递数据 也可以用作配置文件所以xml 现在基本上作为配置文件和数据文件两种格式存在 -->
-<persons>
-<person id="1001">
<name>azrail</name>
<age>23</age>
<score>15</score>
</person>
-<person id="1002">
<name><涛哥></name>
<age>19</age>
<score>100</score>
</person>
-<person id="1003">
<name>晟哥</name>
<age>21</age>
<score>100</score>
</person>
-<person id="1004">
<name>浩哥</name>
<age>18</age>
<score>100</score>
<car id="1" name="bmw"/>
-<money>
-<![CDATA[
<> 这里是纯文本 想些什么就写什么 不会被转译 <
]]>
</money>
</person>
</persons>
//TVSCHEDULE.dtd dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE>
-<TVSCHEDULES>
-<TVSCHEDULE NAME="1">
-<CHANNEL CHAN="1">
<BANNER/>
-<DAY>
<DATE/>
<HOLIDAY/>
</DAY>
</CHANNEL>
</TVSCHEDULE>
-<TVSCHEDULE NAME="1">
-<CHANNEL CHAN="1">
<BANNER/>
-<DAY>
<DATE/>
-<PROGRAMSLOT VTR="">
<TIME/>
<TITLE LANGUAGE="" RATING=""/>
<DESCRIPTION/>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>
</TVSCHEDULES>