xml⽂件的编写解析和元素定义
最近接⼿⼀个项⽬的三期改造,代码是外包公司编写,交由我⽅先做第三期改造,看到项⽬中有⽤到⾃定义的" .dtd "⽂件,以前没见过,做了⼀下总结1.项⽬中⼀个".dtd"⽂件demo  ⽂件名cache-dict.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT dicts (dict*)>
<!ELEMENT dict (from,key,val)>
<!ATTLIST dict id ID #REQUIRED
orgright (none|id|no) "none">
<!ELEMENT from (#PCDATA)>
<!ATTLIST from name (exeid) "exeid">
<!ELEMENT key (#PCDATA)>
<!ELEMENT val (#PCDATA)>
<!ATTLIST val separator CDATA "-">
<!-- ⼀个xml⽂档demo-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dicts SYSTEM "../../dtd/cache-dict.dtd"><!--引⼊dtd⽂件-->
<dicts>
<dict id="a">
<from name="exeid">zhao</from>
<key>value</key>
<val>text</val>
</dict>
<dict id="b">
<from name="exeid">qian</from>
<key>value</key>
<val>text</val>
</dict>
<dict id="c">
<from name="exeid">sun</from>
使用dom4j解析xml文件<key>value</key>
<val>text</val>
</dict>
<dict id="d">
<from name="exeid">li</from>
<key>value</key>
<val>text</val>
</dict>
</dicts>
=0次或者1次,+=⼀次或者多次,*=0次或者多次
2.读取xml⽂档
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
// 读取xml⽂件的⽅法
SAXReader saxReader = new SAXReader();Document doc = ad(f);// f为 File file = new file(“xml⽂档路径”)Element root = RootElement();// 获取 .dtd ⽂档中定义的<!element>属性的元素
if(root != null) {
Iterator itDicts = root.elementIterator();
if(itDicts != null) {
while(itDicts.hasNext()) {
Element elDict = (();
String sID = elDict.attributeValue("id");// 获取元素(节点)中的属性
if(sID != null && !sID.equals("")) {
String orgright = elDict.attributeValue("orgright");
Element el = elDict.element("from");// 再获取节点中的from节点
if(el != null) {
String from = el.attributeValue("name");// 获取name属性为.dtd定义的<!attlist>
if(from != null && !"".equals(from)) {
String idVal = el.getTextTrim();// 获取节点中指定的值例:zhao<from name="exeid">zhao</from>
}
}
}
}
}
}
3. DTD中的定义规则
必须列出所有节点,⼀个都不能少
1)元素
"*"星号  表⽰可以出现0-n次
"+"加号  表⽰可以出现1-n次
"|"  表⽰或(只能出现⼀个)
如(phone|mobile)表⽰固话或⼿机⼆选⼀
"?"问号:  表⽰出现0或1此
#PCDATA 表⽰字符串
2)属性:
定义在开始标记中的键值对
dtd 规则_属性
1) <!ATTLIST 标记名称 属性名称 属性类型>
2) isbn CDATA #REQUIRED: 表⽰isbn属性是必须的
3) isbn CDATA #IMPLIED: 表⽰isbn属性不是必须的
4) hot CDATA"false" :表⽰hot默认值是false

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。