• dom4j_01_02


      1 package xml_z;
      2 
      3 import java.io.ByteArrayOutputStream;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.InputStream;
      8 import java.io.OutputStreamWriter;
      9 import java.util.HashMap;
     10 import java.util.List;
     11 
     12 import org.dom4j.Document;
     13 import org.dom4j.DocumentFactory;
     14 import org.dom4j.Element;
     15 import org.dom4j.io.OutputFormat;
     16 import org.dom4j.io.SAXReader;
     17 import org.dom4j.io.XMLWriter;
     18 
     19 public class Tdom4jTest
     20 {
     21 // dom4j 的两个 jar文件
     22 //    (1)、dom4j-1.6.1.jar
     23 //    (2)、jaxen-1.1-beta-6.jar ==> 这个是用于支持xpath的
     24     
     25 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
     26 //    打开XML文件
     27     
     28     // 打开XML文件 (带 命名空间)
     29     public static Document DocumentGet_byXmlFile_ns(String _strFullFileName, String[] _strsNsHashKey, String[] _strsNsHashValue) throws Exception
     30     {
     31         if ((_strsNsHashKey == null) || (_strsNsHashValue == null))
     32             return null;
     33         if (_strsNsHashKey.length != _strsNsHashValue.length)
     34             return null;
     35         if ((_strsNsHashKey.length == 0) || (_strsNsHashValue.length == 0))
     36             return null;
     37         
     38         // 这里是新建的 DocumentFactory实例,如果不传参数的话,使用的就是单例的DocumentFactory对象
     39         SAXReader reader = new SAXReader(new DocumentFactory());
     40 
     41         HashMap<String, String> hmNS = new HashMap<String, String>();
     42         for (int i=0; i<_strsNsHashKey.length; i++)
     43             hmNS.put(_strsNsHashKey[i], _strsNsHashValue[i]);
     44         
     45         // 设置 命名空间
     46         reader.getDocumentFactory().setXPathNamespaceURIs(hmNS);
     47         File file = new File(_strFullFileName);
     48         //return reader.read(_strFullFileName);// 直接传文件名时,会有乱码...
     49         return reader.read(file);
     50     }
     51     
     52     // 打开XML文件 (不带 命名空间)
     53     public static Document DocumentGet_byXmlFile(String _strFullFileName) throws Exception
     54     {
     55         // 通过 单例的DocumentFactory对象 来加载XML文件
     56         SAXReader sr = new SAXReader();
     57         //Document doc = sr.read(_strFullFileName);
     58         //return doc;
     59         File file = new File(_strFullFileName);
     60         return sr.read(file);
     61     }
     62     
     63     // 通过流 加载XML (这里是通过 文件流,我想 通过字符流应该也是可以的)
     64     public static Document DocumentGet_byXmlStream(String _strFullFileName) throws Exception
     65     {
     66         // 打开文件流    
     67         File file = new File(_strFullFileName);
     68         if (! file.exists()) 
     69         {
     70             System.out.println("File not find : "+file.getName());
     71             return null;
     72         }
     73     
     74         InputStream in = new FileInputStream(file);
     75         
     76         // Dom4j 读文件
     77         SAXReader reader = new SAXReader();
     78         return reader.read(in);
     79     }
     80     
     81 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
     82 //    基本节点操作
     83     
     84     // 得到 root Element
     85     public static Element RootGet(Document _doc)
     86     {
     87         return _doc.getRootElement();
     88     }
     89     
     90     // 添加Element
     91     public static Element ElementNew(Element _eleParent, String _strEleName)
     92     {
     93         return _eleParent.addElement(_strEleName);
     94     }
     95     
     96     // 添加/设置 属性
     97     public static void AttributeSet(Element _ele, String _strAttrName, String _strAttrValue)
     98     {
     99         _ele.addAttribute(_strAttrName, _strAttrValue);
    100     }
    101     
    102     // 获取属性的值
    103     public static String AttributeGet(Element _ele, String _strAttrName, String _strDefaultAttrValue)
    104     {
    105         if (_strDefaultAttrValue == null)
    106             return _ele.attributeValue(_strAttrName);
    107         else
    108             return _ele.attributeValue(_strAttrName, _strDefaultAttrValue);
    109     }
    110     
    111     // 获取节点的 TagName
    112     public static String TagNameGet(Element _ele)
    113     {
    114         return _ele.getName();
    115     }
    116 
    117 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    118 //    得到节点的XML文本
    119     
    120     // 得到某个Element的XML字符 (易读格式)
    121     // 参数2: 返回的字符的编码格式
    122     public static String ElementXml(Element _ele, String _strCharsetName) throws Exception
    123     {
    124         OutputFormat of = OutputFormat.createPrettyPrint();
    125         
    126         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    127         OutputStreamWriter osw = null;
    128         if (_strCharsetName == null)
    129             osw = new OutputStreamWriter(bos);
    130         else
    131             osw = new OutputStreamWriter(bos, _strCharsetName);
    132         XMLWriter writer = new XMLWriter(osw, of);
    133         
    134         writer.write( _ele );
    135         writer.close();
    136         
    137         // ***
    138         
    139         String strRtn = new String(bos.toByteArray());
    140 //System.out.println(strRtn);
    141         return strRtn;
    142     }
    143     
    144     // 得到某个Element的XML字符 (不易读,一整行字符串 的形式)
    145     // 参数2: 返回的字符的编码格式
    146     public static String ElementXml_Compact(Element _ele, String _strCharsetName) throws Exception
    147     {
    148         OutputFormat of = OutputFormat.createCompactFormat();
    149         
    150         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    151         OutputStreamWriter osw = null;
    152         if (_strCharsetName == null)
    153             osw = new OutputStreamWriter(bos);
    154         else
    155             osw = new OutputStreamWriter(bos, _strCharsetName);
    156         XMLWriter writer = new XMLWriter(osw, of);
    157         
    158         writer.write( _ele );
    159         writer.close();
    160         
    161         // ***
    162         
    163         String strRtn = new String(bos.toByteArray());
    164 //System.out.println(strRtn);
    165         return strRtn;
    166     }
    167     
    168 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    169 //    保存文件
    170     
    171     // 通过Document 来保存XML文件
    172     public static void Save_byDoc(Document _doc, String _strFullFileName, boolean _bEscapeText) throws Exception
    173     {
    174         OutputFormat of = OutputFormat.createPrettyPrint();
    175         of.setEncoding("utf-8");
    176         //of.setTrimText(false);
    177         //of.setLineSeparator("
    ");
    178 
    179         FileOutputStream fos = new FileOutputStream( _strFullFileName );
    180         OutputStreamWriter osw = new java.io.OutputStreamWriter(fos, "utf-8");
    181         XMLWriter writer = new XMLWriter(osw, of);
    182         writer.setEscapeText(_bEscapeText); // 转义符 // 是否对特殊符号转义
    183         writer.write( _doc );
    184         writer.close();
    185     }
    186     
    187     // 通过Document 来保存XML文件 (并且去掉里面的 命名空间 字符串)
    188     public static String Save_byDoc_noNS(Document _doc, String _strFullFileName, String _strNsName, String _strNsValue) throws Exception
    189     {
    190         OutputFormat of = OutputFormat.createPrettyPrint();
    191         
    192         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    193         OutputStreamWriter osw = new OutputStreamWriter(bos);
    194         XMLWriter writer = new XMLWriter(osw, of);
    195         
    196         writer.write( _doc );
    197         writer.close();
    198         
    199         // ***
    200         
    201         String strRtn = new String(bos.toByteArray());
    202         //String strRegex = " xmlns.*?""+_strNsHashValue+""";
    203         String strRegex = " "+_strNsName+".*?""+_strNsValue+""";
    204         strRtn = strRtn.replaceAll(strRegex, ""); // 去掉命名空间
    205         //strRtn = strRtn.replaceAll("	+", "	"); // 少一点"	"
    206         System.out.println(strRtn);
    207 //            strRtn = new String(strRtn.getBytes(), "utf-8");
    208 //            System.out.println(strRtn);
    209         // *** *** ***
    210 
    211         of.setEncoding("utf-8");
    212         of.setTrimText(false);
    213         
    214         FileOutputStream fos = new FileOutputStream( _strFullFileName );
    215         osw = new java.io.OutputStreamWriter(fos, "utf-8");
    216         writer = new XMLWriter(osw);
    217         writer.setEscapeText(false);
    218         writer.write( strRtn );
    219         writer.close();
    220         
    221         return null;
    222     }
    223     
    224 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    225 //    查找  Element
    226     
    227     // 查找 单个 Element
    228     public static Element ElementGet(Document _doc, String _strXpath)
    229     {
    230         //Element ele = (Element)_doc.selectSingleNode("//cge:PSR_Ref");
    231         Element ele = (Element)_doc.selectSingleNode(_strXpath);
    232         if (ele == null)
    233             System.out.println("ElementGet ==> 'ele == null'");
    234         
    235         return ele;
    236     }
    237     
    238     public static List<?> ElementsGet(Document _doc, String _strXpath)
    239     {
    240         return _doc.selectNodes(_strXpath);
    241     }
    242 
    243 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    244 //    节点中 添加 字符串
    245     
    246     // 往节点里面添加 字符串 (用的是 "Element = Element.addEntity(String name, String text);")
    247     public static void ElementAddText(Element _ele, String _strEntityName, String _strEntityText)
    248     {
    249         _ele.addEntity(_strEntityName, _strEntityText);
    250     }
    251     
    252 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    253 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    254     
    255     public static void main(String[] args) throws Exception
    256     {
    257         /*
    258         String strFullFIleName = "F:\ZC_Code_E\workspace__MyEclipse2013\dom4j_test\FZX069A开关站图_V1.svg";
    259         String strFullFIleName1 = "F:\ZC_Code_E\workspace__MyEclipse2013\dom4j_test\FZX069A开关站图_V1__Z.svg";
    260         
    261         Document doc = Tdom4jTest.DocumentGet_byXmlFile(strFullFIleName);
    262         Tdom4jTest.Save_byDoc(doc, strFullFIleName1, false);
    263         */
    264         
    265         String strFullFIleName = "F:\ZC_Code_E\workspace__MyEclipse2013\dom4j_test\FZX069A开关站图_V1.svg";
    266         
    267         String[] strNsNames = {
    268                 "xmlns",    // 根 ns
    269                 "xlink",    // 子 ns
    270                 "cge",        // 子 ns
    271                 "hzsvg"};    // 子 ns
    272         String[] strNsValues= {
    273                 "http://www.w3.org/2000/svg",
    274                 "http://www.w3.org/1999/xlink",
    275                 "http://iec.ch/TC57/2005/SVG-schema#",
    276                 "http://holleygrid.cn/svg"};
    277         Document doc = Tdom4jTest.DocumentGet_byXmlFile_ns(strFullFIleName, strNsNames, strNsValues);
    278         Element ele = Tdom4jTest.ElementGet(doc, "//xmlns:g[@id='1650207777209']");
    279         // 下面这样,找不到节点
    280         //Element ele = Tdom4jTest.ElementGet(doc, "//g[@id='1650207777209']");
    281         if (ele == null)
    282             System.out.println("//xmlns:g[@id='1650207777209'] ==> find nothing");
    283         else
    284             System.out.println(Tdom4jTest.TagNameGet(ele));
    285         
    286         ele = Tdom4jTest.ElementGet(doc, "//cge:PSR_Ref");
    287         if (ele == null)
    288             System.out.println("//cge:PSR_Ref ==> find nothing");
    289         else
    290             System.out.println(ele.attributeValue("ObjectID"));
    291         
    292         List<?> list = Tdom4jTest.ElementsGet(doc, "//cge:PSR_Ref");
    293         if (list != null)
    294             for (int i=0; i<list.size(); i++)
    295             {
    296                 Element e = (Element) list.get(i);
    297                 System.out.println(e.attributeValue("ObjectID"));
    298             }
    299     }
    300 
    301 }

    测试代码保存于:百度云 CodeSkill33 --> 全部文件 > java_测试_code_zc --> dom4j_test__Work_20151207_1551.rar

    C

  • 相关阅读:
    C#事件解析
    VB 正则表达式应用
    vb.net 2进制、8进制、10进制、16进制...各种进制间的轻松转换
    .net 中的委托(delegate)的使用和原理
    什么是Color LUT/Color Map
    Java怀旧:About left/right shift, negative value representation and signextended(while shifting)
    Eclipse Tips
    Setup KGDB
    Java怀旧:foreach version loop, Changes to iteration variable doesn't take effect
    Java怀旧:break <label> & continue <label>,break <label>相当于简易的goto了,凑活用了
  • 原文地址:https://www.cnblogs.com/codeskilla/p/5026295.html
Copyright © 2020-2023  润新知