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>
      <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 = saxReader.read(f);// f为 File file = new file(“xml文档路径”)Element root = doc.getRootElement();// 获取 .dtd 文档中定义的<!element>属性的元素
if(root != null) {
    Iterator itDicts = root.elementIterator();
    if(itDicts != null) {
        while(itDicts.hasNext()) {
           Element elDict = (Element)itDicts.next();
           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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值