精华内容
下载资源
问答
  • bat 获取文件生成时间并复制相关文件代码如下: @echo off :复制文件来源路径 set fromPath=\172.18.112.10\dqfw\raw\AGME\SOIL :文件的存储路径 set endPath=D:\HC\temp\parse\soilWaterNew\ :获取yyyy/...

    bat 获取文件的生成时间并复制相关文件

    代码如下:
    @echo off
    :复制文件来源路径
    set fromPath=\172.18.112.10\dqfw\raw\AGME\SOIL
    :文件的存储路径
    set endPath=D:\HC\temp\parse\soilWaterNew\
    :获取yyyy/MM/dd格式的当前日期
    set nowDate=%date:~0,4%/%date:~5,2%/%date:~8,2%
    :for 循环遍历文件来源路径下的文件夹,/ad-h-s/o-n/tc 是dir命令的相关属性,skip=4 表示跳过前4行,delims=

    ” 表示根据’ ’和”(空格)进行该行的分割,tokens=1,3 表示获取刚才分割后的第1个和第3个元素,因为获取的是两个元素,因此在for循环中有%%b,同时需要注意%%b的表示tokens的第二个元素,并且命名b是要遵循英文字母的顺序,for循环中变量是a,因此tokens的第二个元素命名为b。同时delims最好放在最后,因为如果delims= skip=4 tokens=1,3,第二个分割符号空格就会被认为delims和skip的属性的区分。
    for /f “skip=4 tokens=1,3 delims= ” %%a in (‘dir %fromPath% /ad-h-s/o-n/tc’) do (
    if %%a==%nowDate% (
    xcopy “%fromPath%\%%b*.txt” “%endPath%” /k /y /c
    ) else (
    goto end
    )
    )
    :end
    pause
    代码结束
    相关参考:
    1 http://www.bathome.net/thread-8300-1-1.html
    2 http://www.bathome.net/viewthread.php?tid=7057&highlight=delims

    展开全文
  • 读取数据,点解“获取”按钮动态生成XML格式的文档,并把生成的文档放在TEXTBOX或者生成一个XML文件。2.点击“浏览”按钮,把获取到的XML格式文档,转换成HTML,在浏览器中显示。首先在ASPX对应的CS文件中引入using...
    1. 程序实现功能:
    2. 1.读取数据,点解“获取”按钮动态生成XML格式的文档,并把生成的文档放在TEXTBOX或者生成一个XML文件。
    3. 2.点击“浏览”按钮,把获取到的XML格式文档,转换成HTML,在浏览器中显示。
    4. 首先在ASPX对应的CS文件中引入using System.Xml;
    5. int m = 0; int loop = 0;
    6. //根据指定的获取深度DEPTH获取用于生成XML文档的数据
    7. private int initData(string[] parent, string[] guid, string[] path, string[] name, ChannelCollection cc,int depth)
    8. {
    9.   foreach (Channel channel in cc)
    10.   {
    11.      parent[m] = channel.Parent.Guid;
    12.      guid[m] = channel.Guid;
    13.      path[m] = channel.Path;
    14.      name[m] = channel.Name;
    15.      m = m + 1;
    16.     if (channel.Channels.Count!=0 &&loop<depth)
    17.      {
    18.        ChannelCollection c = channel.Channels;
    19.        ++loop;
    20.        initData( parent, guid, path, name, c,depth);
    21.      }
    22.    }
    23.    return m;
    24. }
    25. //点击“获取XML内容“按钮执行的事件
    26. protected void ButtonGetXml_Click(object sender, EventArgs e)
    27. {
    28. ChannelCollection cc = selectedChannel.Channels;
    29. string[] parent =new string[1000];
    30. string[] guid = new string[1000];
    31. string[] path = new string[1000];
    32. string[] style = new string[1000];
    33. string[] name = new string[1000];
    34. int i=0;
    35. int depth = int.Parse( DropDownListGetDepth.SelectedValue);
    36. //根据指定的获取深度DEPTH获取用于生成XML文档的数据
    37. i=initData(parent, guid, path, name, cc,depth);
    38. //创建XML 文档对象
    39. document = new XmlDocument();
    40. //创建XML节点元素
    41. XmlElement channelsElement = document.CreateElement("Channels");
    42. document.AppendChild(channelsElement);
    43. for (int k = 1; k <=i; k++)
    44. {
    45. channelsElement.AppendChild(document.CreateElement("CHANNEL"));
    46. }
    47. //根据元素节点名获取元素节点
    48. XmlNodeList nodelist = document.GetElementsByTagName("CHANNEL");
    49. int size = nodelist.Count;
    50. for (int k = 0; k < size; k++)
    51. {
    52. XmlNode node = nodelist.Item(k);
    53. XmlElement elementNode = (XmlElement)node;
    54. //elementNode.SetAttribute("guid",guid[k]);设置元素属性
    55. elementNode.AppendChild(document.CreateElement("PARENT"));
    56. elementNode.AppendChild(document.CreateElement("GUID"));
    57. elementNode.AppendChild(document.CreateElement("PATH"));
    58. elementNode.AppendChild(document.CreateElement("NAME"));
    59. }
    60. XmlNodeList nodelistParent = document.GetElementsByTagName("PARENT");
    61. int sizeParent = nodelistParent.Count;
    62. for (int k = 0; k < sizeParent; k++)
    63. {
    64. XmlNode node = nodelistParent.Item(k);
    65. XmlElement elementNode = (XmlElement)node;
    66. //用初始化后的数据生成对应元素节点的文本节点
    67. elementNode.AppendChild(document.CreateTextNode(parent[k]));
    68. }
    69. XmlNodeList nodelistGuid = document.GetElementsByTagName("GUID");
    70. int sizeGuid = nodelistGuid.Count;
    71. for (int k = 0; k < sizeGuid; k++)
    72. {
    73. XmlNode node = nodelistGuid.Item(k);
    74. XmlElement elementNode = (XmlElement)node;
    75. elementNode.AppendChild(document.CreateTextNode(guid[k]));
    76. }
    77. XmlNodeList nodelistPath = document.GetElementsByTagName("PATH");
    78. int sizePath = nodelistPath.Count;
    79. for (int k = 0; k < sizePath; k++)
    80. {
    81. XmlNode node = nodelistPath.Item(k);
    82. XmlElement elementNode = (XmlElement)node;
    83. elementNode.AppendChild(document.CreateTextNode(path[k]));
    84. }
    85. XmlNodeList nodelistName = document.GetElementsByTagName("NAME");
    86. int sizeName = nodelistName.Count;
    87. for (int k = 0; k < sizeName; k++)
    88. {
    89. XmlNode node = nodelistName.Item(k);
    90. XmlElement elementNode = (XmlElement)node;
    91. elementNode.AppendChild(document.CreateTextNode(name[k]));
    92. }
    93. // document.Save("/icbc/newxml.xml");//可以保存为XML文件,位置在C:/icbc/newxml.xml
    94. //创建用于保存内容的字符串里
    95. StringBuilder sb = new StringBuilder();
    96. //输出流指向字符串
    97. XmlWriter writer= XmlWriter.Create(sb);
    98. //XML文档把内容写到字符串里
    99. document.WriteContentTo(writer);
    100. writer.Flush();
    101. //让页面中的文本框显示XML文档内容
    102. TextBoxContent.Text=sb.ToString() ;
    103. }
    104. //点击”预览“按钮,转到XML生成HTML的页面
    105. protected void ButtonYuLAN_Click(object sender, EventArgs e)
    106. {
    107. //XmlDocument xml = new XmlDocument();
    108. if (TextBoxContent.Text == null || TextBoxContent.Text == "")
    109. {
    110. Response.Write("<script>alert('请先点击获取内容');</script>");
    111. return;
    112. }
    113. Session["xmlTextBoxContent"] = TextBoxContent.Text;
    114. Response.Write("<script>window.open('PreExploerXMLMenu.aspx')</script>");
    115. }
    116. //'PreExploerXMLMenu.aspx.CS的内容如下
    117. using System;
    118. using System.Data;
    119. using System.Configuration;
    120. using System.Collections;
    121. using System.Web;
    122. using System.Web.Security;
    123. using System.Web.UI;
    124. using System.Web.UI.WebControls;
    125. using System.Web.UI.WebControls.WebParts;
    126. using System.Web.UI.HtmlControls;
    127. using System.Xml;
    128. using System.IO;
    129. using System.Text;
    130. public partial class Module_ChannelInfoManage_PreExploerXMLMenu : System.Web.UI.Page
    131. {
    132. protected void Page_Load(object sender, EventArgs e)
    133. {
    134. //创建XmlDisplay类的实例
    135. XmlDisplay XmlDisplayDemo = new XmlDisplay();
    136. //得到XML内容,申明为字符串用于生成 StringReader
    137. string xmlcontent=(string )Session["xmlTextBoxContent"];
    138. //生成在网页上保留静态文本的位置
    139. Literal LT = new Literal();
    140. LT.Text = XmlDisplayDemo.LoadDocument(new StringReader(xmlcontent));
    141. this.Panel1.Controls.Add(LT);
    142. }
    143. //这个类读入并处理XML文件
    144. public class XmlDisplay
    145. {
    146. public string LoadDocument(StringReader sr)
    147. {
    148. XmlReader xmlReader = null;
    149. StringBuilder html = new StringBuilder();
    150. try
    151. {
    152. //创建XMLTextReader的实例。
    153. xmlReader = XmlReader.Create(sr);
    154. //处理XML文件
    155. html.Append(ProcessXml(xmlReader));
    156. }
    157. catch (XmlException ex)
    158. {
    159. html.Append("发生一个XML异常:" + ex.ToString());
    160. }
    161. catch (Exception ex)
    162. {
    163. html.Append("发生一个普通异常:" + ex.ToString());
    164. }
    165. finally
    166. {
    167. if (xmlReader != null)
    168. xmlReader.Close();
    169. }
    170. return html.ToString();
    171. }
    172. //处理XML数据的方法,用于控制生成HTML文件的格式
    173. private string ProcessXml(XmlReader xmlReader)
    174. {
    175. StringBuilder temp = new StringBuilder();
    176. int i = 1;
    177. temp.Append("<table border=1>");
    178. //XML读取器找到”NAME“的标记元素
    179. xmlReader.ReadToFollowing("NAME");
    180. do{
    181. if (i == 1) temp.Append("<tr>");
    182. temp.Append("<td>");
    183. //xml读取器的位置向前移动,指到 文本元素内容
    184. xmlReader.Read();
    185. //读取文本元素内容到字符串中
    186. temp.Append(xmlReader.Value);
    187. temp.Append("</td>");
    188. //一行显示10列数据
    189. if ((i%10==0)) temp.Append("</tr><tr>");
    190. i++;
    191. while (xmlReader.ReadToFollowing("NAME"));
    192. temp.Append("</tr></table>");
    193. return temp.ToString();
    194. }//结束ProcessXML方法
    195. }
    196. }
    197. 来源:aaronbai的blog
    展开全文
  • XML文件生成和解析

    千次阅读 2016-05-31 19:41:41
    在dom中是把每一个元素都看做是一个节点Node的,所有页面上的属性、元素等都是继承自Node的,所以当获取到的是一个Node,而你知道它实际的类型并需要使用的时候就可能会需要进行类型转换了。 Element root = do

                      使用Dom生成xml文件和解析xml文件

       xml这种文件格式在很多时候都是很适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比较重要了。在dom中是把每一个元素都看做是一个节点Node的,所有页面上的属性、元素等都是继承自Node的,所以当获取到的是一个Node,而你知道它实际的类型并需要使用的时候就可能会需要进行类型转换了。

    Element root = document.getDocumentElement();//获取根节点

    下面是代码:

    1、生成xml:

    package geneXmlByDom;
    import java.io.*;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    public class BuildXml {
    public  BuildXml() throws Exception {  
            //step1:获得一个DocumentBuilderFactory  
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
            //step2:获得一个DocumentBuilder  
            DocumentBuilder db = factory.newDocumentBuilder();  
            //step3:新建一个Document对象  
            Document document = db.newDocument();  
            //step4:创建一个根节点  
            Element rootElement = document.createElement("Persons");  
            for (int i=0;i<5;i++) {  
                //step5:创建一个节点  
                Element person = document.createElement("person");  
                //step6:为该节点设定属性  
                person.setAttribute("id", "id_"+i);  
                Element name = document.createElement("name");  
                //为节点设定文本内容  
                name.setTextContent("name_"+i);  
                Element address = document.createElement("address");  
                address.setTextContent("address_"+i);  
                Element email = document.createElement("email");  
                email.setTextContent("email_"+i);  
                person.appendChild(name);  
                person.appendChild(address);  
                person.appendChild(email);  
                //step7:为某一元素节点设立子节点  
                rootElement.appendChild(person);  
            }  
            //step8:把刚刚建立的根节点添加到document对象中  
            document.appendChild(rootElement);  
            //step9:获得一个TransformerFactory对象  
            TransformerFactory transformerFactory = TransformerFactory.newInstance();  
            //step10:获得一个Transformer对象  
            Transformer transformer = transformerFactory.newTransformer();  
            //step11:把document对象用一个DOMSource对象包装起来  
            Source xmlSource = new DOMSource(document);  
            //step12:建立一个存储目标对象  
            Result outputTarget = new StreamResult(new File("persons.xml"));  
            //step13:生成相应的xml文件  
            transformer.transform(xmlSource, outputTarget);  
        }  
    public static void main(String[] args) throws Exception {
    BuildXml buildxml=new BuildXml();
    }
    }

    2、生成的xml文件是这个样子

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
    <Persons>  
        <person id="id_0">  
            <name>name_0</name>  
            <address>address_0</address>  
            <email>email_0</email>  
        </person>  
        <person id="id_1">  
            <name>name_1</name>  
            <address>address_1</address>  
            <email>email_1</email>  
        </person>  
        <person id="id_2">  
            <name>name_2</name>  
            <address>address_2</address>  
            <email>email_2</email>  
        </person>  
        <person id="id_3">  
            <name>name_3</name>  
            <address>address_3</address>  
            <email>email_3</email>  
        </person>  
        <person id="id_4">  
            <name>name_4</name>  
            <address>address_4</address>  
            <email>email_4</email>  
        </person>  
    </Persons>  


    在进行输出写到文件的时候可以设置一些Transformer输出的参数,如xml的编码,或者输出形式等。

    transformer.setOutputProperty("encoding", "UTF-8");//设定文档编码,属性也可以使用OutputKeys的静态常量属性设定  

    transformer.setOutputProperty(OutputKeys.METHOD, "xml");//输出方式,可以是xml、html和text  

    下面的解析也是基于这个文件的。

    3、解析xml:

    package geneXmlByDom;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    public class parseXmlByDom {
    public parseXmlByDom() throws Exception {  
            //step1:获得DocumentBuilderFactory  
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
            //step2:获得DocumentBuilder  
            DocumentBuilder db = factory.newDocumentBuilder();  
            //step3:把需要解析的xml文件加载到一个document对象中  
            Document document = db.parse("persons.xml");  
            //获取所有名称为person的元素  
            NodeList nodeList = document.getElementsByTagName("person");  
            for (int i=0;i<nodeList.getLength();i++) {  
                //因为这里我知道它就是一个Element对象,所以进行了强转  
                Element person = (Element)nodeList.item(i);  
                //获得Element对象的属性  
                String id = person.getAttribute("id");  
                //因为这里我知道只有一个对象,所以就直接item(0)了,  
                //因为Dom是把每个对象都看做是一个节点的,所以如果在item(0)的时候直接取getNodeValue()是取不到值的,  
                //只有是TextNode的时候用那个方法才可以取到值,如果想直接取值就用getTextContent()  
                String name = person.getElementsByTagName("name").item(0).getTextContent();  
                String address = person.getElementsByTagName("address").item(0).getTextContent();  
                String email = person.getElementsByTagName("email").item(0).getTextContent();  
                /*String name1=person.getNodeName();
                String content=person.getTextContent();
                System.out.println("name1="+name1+"-content="+content+"\n");*/
                System.out.println(" id = "+id+" \r\n name = "+name+" \r\n address = "+address+" \r\n email = "+email);  
                System.out.println("-------------------------------------");     
            }   
        }  
    public static void main(String[] args) throws Exception {
    parseXmlByDom buildxml=new parseXmlByDom();
    }
    }

    4、解析后输出的结果:

     id = id_0   

     name = name_0   

     address = address_0   

     email = email_0  

    -------------------------------------  

     id = id_1   

     name = name_1   

     address = address_1   

     email = email_1  

    -------------------------------------  

     id = id_2   

     name = name_2   

     address = address_2   

     email = email_2  

     

     

                               JDOM使用指南

    1、Jdom的下载和安装  

    JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。

        Jdom的下载可至jdom官网http://www.jdom.org,目前最新的是2.05,不过要是怀旧用了jdk1.2到1.4,也可以用1.1.3,使用两个版本,区别只是导出包的时候,包名是org.jdom还是org.jdom2;下载后,将jdom.jar(2.05版为jdom-2.0.5.jar,解压后即可见到;1.1.3版为jdom-1.1.3.jar,解压后在build目录下),将jar文件放到一个可靠的位置,相对专业的位置是classpath,比如楼主参考放在了C:\Program Files\Java\jre6\lib\ext,实际上,这个位置可以任意,因为是需要添加jar文件路径工场的build path的,不过编程也需要专业一点,以及方便归档,所以建议还是放到lib/ext。至此,安装完毕。

    2、JDOM 包概览

    JDOM是由以下几个包组成的

    org.jdom                包含了所有的xml文档要素的java类

    org.jdom.adapters         包含了与dom适配的java类

    org.jdom.filter            包含了xml文档的过滤器类

    org.jdom.input            包含了读取xml文档的类

    org.jdom.output           包含了写入xml文档的类

    org.jdom.transform        包含了将jdom xml文档接口转换为其他xml文档接

    org.jdom.xpath            包含了对xml文档xpath操作的类三、JDOM 类说明

    3、生成xml文档

    package xml;
    import java.io.*;
    import org.jdom2.*;
    import org.jdom2.output.*;
    public class WriteXML {
    public void BuildXML() throws Exception
        {
            Element root,student,number,name,age;
            root = new Element("student-info"); //生成根元素:student-info   
            student = new Element("student");      //生成元素:student,该元素中将包含元素number,name,age
            number = new Element("number");
            name = new Element("name");
            age = new Element("age");
            Document doc = new Document(root);    //将根元素植入文档doc中
            number.setText("001");
            name.setText("lnman");
            age.setText("24");
            student.addContent(number);
            student.addContent(name);
            student.addContent(age);
            root.addContent(student);
            Format format = Format.getCompactFormat();
            format.setEncoding("gb2312");           //设置xml文件的字符为gb2312
            format.setIndent("    ");               //设置xml文件的缩进为4个空格
            XMLOutputter XMLOut = new XMLOutputter(format);//在元素后换行,每一层元素缩排四格
            XMLOut.output(doc, new FileOutputStream("studentinfo.xml"));    
        }
        public static void main(String[] args) throws Exception
        {
            WriteXML w = new WriteXML();
            System.out.println("Now we build an XML document .....");
            w.BuildXML();
            System.out.println("finished!");
        }
    }


    生成的xml文档为:

    <?xml version="1.0" encoding="gb2312"?>
    <student-info>
      <student>
        <number>001</number>
        <name>lnman</name>
        <age>24</age>
      </student>
    </student-info>


    4、读取xml文档

    package xml;
    import org.jdom2.output.*;
    import org.jdom2.input.*;
    import org.jdom2.*;
    import java.io.*;
    import java.util.*;
    public class ReadXML {
    public static void main(String[] args) throws Exception
        {     
            SAXBuilder builder = new SAXBuilder();
            Document read_doc = builder.build("studentinfo.xml");
            Element stu = read_doc.getRootElement();
            List list = stu.getChildren("student");
            for(int i = 0;i < list.size();i++)
            {
                Element e = (Element)list.get(i);
                String str_number = e.getChildText("number");
                String str_name = e.getChildText("name");
                String str_age = e.getChildText("age");
                System.out.println("---------STUDENT--------------");
                System.out.println("NUMBER:" + str_number);
                System.out.println("NAME:" + str_name);
                System.out.println("AGE:" + str_age);
                System.out.println("------------------------------");
                System.out.println();
            }       
        }
    }


    5、方法

    (1)、创建Document

    /**
     * 创建xml元素
     */
    @Test
    public void createDoc() {
        Document doc = null;
        //method 1、创建一个Doc文档,添加一个元素root
        doc = new Document(new Element("root"));
        print(doc);
        //method 2、创建一个Doc文档,添加一个元素root,设置root元素的节点文本
        doc = new Document(new Element("root").setText("this is a root el"));
        print(doc);
        //method 3、创建一个Doc文档,添加一个元素root,设置root元素的节点文本且添加一个属性id,值为110
        Element root = new Element("root");
        root.setText("this is a root el");
        root.setAttribute("id", "110");
        doc.setRootElement(root);
    fail("method 3: \n" + out.outputString(doc));
     //method 4、创建一个Doc文档,添加一个元素root,设置root元素的节点文本
        doc = new Document();
        doc.addContent(new Element("root").setText("this is a root el"));
        fail("method 4: \n" + out.outputString(doc));
        fail(doc.toString());
    }


    * new Document可以创建一个doc文档

    当给Document传递一个Element参数时,这个Element就是根元素;

    当调用Document的setRootElement方法时,可以设置当前Doc的根元素;

    当调用doc的addContent的时候,添加的元素将会是根元素;

    doc = new Document(new Element("root").setText("this is a root el"));

    上面就创建了一个doc,根元素是root,root节点的内容是this is a root el;

    注意setText方法返回的对象是当前Element,类似是StringBuffer的append方法;

    * new Element()可以创建一个元素

    如果传递参数那么这个参数将会是元素节点的名称;

    Element的setText方法可以设置元素的文本值;

    Element root = new Element("root");

    root.setText("this is a root el");

    创建一个节点名称为root的元素,文本是this is a root el

    * setAttribute()可以设置某个具体节点的属性值

    root.setAttribute("id", "110");

    给root节点添加一个id,值为110

    * addContent添加注释

    root .addContent(new Comment("注释"));

    在root元素下添加一个注释;

    addContent是向元素中添加内容,而setContent是设置内容;

    * setText设置元素文本内容

    root.setText("this is a root el");

    同样

    root. setContent(new Text("this is text"))

    同样

    root.addContent("this is text");

    下面用上面的这些方法,创建一篇XML文档。文档内容如下:

    /**

    (2)、创建xml文档 

    <?xml version="1.0" encoding="UTF-8"?>
        <car vin="123fhg5869705iop90">
          <!--Description of a car-->
          <make>Toyota</make>
          <model>Celica</model>
          <year>1997</year>
          <color>green</color>
          <license state="CA">1ABC234</license>
        </car>

     */

    @Test
    public void createXMLDoc() {
        //创建一个car的元素
        Element carEl = new Element("car");
        //创建vin属性,并设置值
        carEl.setAttribute("vin", "123fhg5869705iop90");
        //创建注释
        carEl.addContent(new Comment("Description of a car"));
        //创建一个make元素,设置文本内容
        carEl.addContent(new Element("make").setText("Toyota"));
        //创建一个model元素,添加一个文本元素
        carEl.addContent(new Element("model").setContent(new Text("Celica")));
        //创建一个year元素,添加文本内容
        carEl.addContent(new Element("year").addContent("1997"));
        //创建一个color元素,文本内容是green
        carEl.addContent(new Element("color").setText("green"));
        //创建一个license的元素
        Element licenseEl = new Element("license");
        //为license元素添加文本内容
        licenseEl.addContent("1ABC234");
        //创建一个state的属性,值为CA
        licenseEl.setAttribute("state", "CA");
        //将licenseEl添加到根元素中
        carEl.addContent(licenseEl);
        //将car元素设置为根元素
        Document doc = new Document(carEl);
        print(doc);
        /*out = new XMLOutputter();
        try {
            out.output(doc, System.out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    (3)、 读取XML文件的内容

     disk.xml文件内容如下:

      

    <?xml version="1.0" encoding="UTF-8"?>
    <HD>
        <disk name="C">
            <capacity>8G</capacity>
            <directories>200</directories>
            <files>1580</files>
        </disk>
        <disk name="D">
            <capacity>10G</capacity>
            <directories>500</directories>
            <files>3000</files>
        </disk>
        <disk2 name="E">
            <capacity>11G</capacity>
            <directories>50</directories>
            <files size="200" modifyDate="2011-08-3">
                <file>Java book</file>
                <file>Spring.txt</file>
                <file>strtus.doc</file>
            </files>
        </disk2>
        <files size="220">500</files>
    </HD>

    读取disk文件的内容,代码如下:

    /**
     * <b>function:</b>读取xml文件中的元素
     * @author hoojo
     * @createDate 2011-8-4 下午04:54:17
     */
    @Test
    @SuppressWarnings("unchecked")
    public void readXMLContent() {
        SAXBuilder builder = new SAXBuilder();//通过SAX解析器创建一个JDOM文档
        try {
            Document doc = builder.build(new File("file/disk.xml"));
            Element rootEl = doc.getRootElement();
            //获得所有子元素
            List<Element> list = rootEl.getChildren();
            //List<Element> list = rootEl.getChildren("disk");
            for (Element el : list) {
                //获取name属性值
                String name = el.getAttributeValue("name");
                //获取子元素capacity文本值
                String capacity = el.getChildText("capacity");
                //获取子元素directories文本值
                String directories = el.getChildText("directories");
                String files = el.getChildText("files");
                System.out.println("磁盘信息:");
                System.out.println("分区盘符:" + name);
                System.out.println("分区容量:" + capacity);
                System.out.println("目录数:" + directories);
                System.out.println("文件数:" + files);
                System.out.println("-----------------------------------");
            }
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    * getChildren方法可以获取所有子元素

    * getChildren(elName)可以获取所有名称为elName的子节点

    * getAttributeValue可以获取指定属性的值

    * getChildText可以获取子节点的文本值

     

                                DOM4J使用指南

    1、DOM4J简介

    Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

    它的主要接口都在org.dom4j这个包里定义:

    Attribute Attribute     定义了XML的属性

    Branch Branch        为能够包含子节点的节点如XML元素(Element)和文档

                        (Docuemnts)定义了一个公共的行为,

    CDATA CDATA       定义了XML CDATA 区域

    CharacterData         CharacterData是一个标识借口,标识基于字符的节点。

                        如CDATA,Comment, Text.

    Comment            定义了XML注释的行为

    Document            定义了XML文档

    DocumentType        定义XML DOCTYPE声明

    Element              定义XML 元素

    ElementHandler       定义了 Element 对象的处理器

    ElementPath          被 ElementHandler 使用,用于取得当前正在处理的路径

                        层次信息

    Entity               定义 XML entity

    Node               为所有的dom4j中XML节点定义了多态行为

    NodeFilter           定义了在dom4j节点中产生的一个滤镜或谓词的行为

    ProcessingInstruction  定义 XML 处理指令.

    Text                定义XML 文本节点.

    Visitor              用于实现Visitor模式.

    XPath              在分析一个字符串后会提供一个XPath 表达式

    要想弄懂这套接口,关键的是要明白接口的继承关系:

      interface java.lang.Cloneable

      interface org.dom4j.Node

      interface org.dom4j.Attribute

      interface org.dom4j.Branch

      interface org.dom4j.Document

      interface org.dom4j.Element

      interface org.dom4j.CharacterData

      interface org.dom4j.CDATA

      interface org.dom4j.Comment

      interface org.dom4j.Text

      interface org.dom4j.DocumentType

      interface org.dom4j.Entity

      interface org.dom4j.ProcessingInstruction

      一目了然,很多事情都清楚了。大部分都是由Node继承来的。知道这些关系,将来写程序就不会出现ClassCastException了。

    2、读取并解析XML文档

      读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。

    // 从文件读取XML,输入文件名,返回XML文档

    通过SAXReader类来解析XML文档的代码: 

      SAXReader reader = new SAXReader();

      Document document = reader.read(new File(“student.xml”));

    通过DOMReader类来解析XML文档的代码

    DocumentBuilderFactory adf=DocumentBuilderFactory .newInstance();

    DocumentBuilder db=dbf.newDocumentBuilder();

    org.w3.c.dom.Document Document=db.parse(new File(“student.xml”));

    DOMReader domReader==new DOMReader();

    Org.dom4j.Document doc=domReader.read(document);

      其中,reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就代表了整个XML。

      根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。

    3、取得Root节点

      读取后的第二步,就是得到Root节点。熟悉XML的人都知道,一切XML分析都是从Root元素开始的。

      public Element getRootElement(Document doc){

      return doc.getRootElement(); //返回根元素

      }

    4、遍历XML树

      DOM4J提供至少3种遍历节点的方法:

      1) 枚举(Iterator)

      // 枚举所有子节点

      for ( Iterator i = root.elementIterator(); i.hasNext(); ) {

      Element element = (Element) i.next();

      // do something

      }

      // 枚举名称为foo的节点

      for ( Iterator i = root.elementIterator(foo); i.hasNext();) {

      Element foo = (Element) i.next();

      // do something

      }

      // 枚举属性

      for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {

      Attribute attribute = (Attribute) i.next();

      // do something

      }

      2)递归

      递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法

      public void treeWalk() {

      treeWalk(getRootElement());

      }

      public void treeWalk(Element element) {

      for (int i = 0, size = element.nodeCount(); i < size; i++) {

      Node node = element.node(i);

      if (node instanceof Element) {

      treeWalk((Element) node);

      } else { // do something....

      }

      }

      }

      3) Visitor模式

      最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)

      只需要自定一个类实现Visitor接口即可。

      public class MyVisitor extends VisitorSupport {

      public void visit(Element element){

      System.out.println(element.getName());

      }

      public void visit(Attribute attr){

      System.out.println(attr.getName());

      }

      }

      调用: root.accept(new MyVisitor())

      Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器,Visitor接口的Default Adapter模式,这个模式给出了各种visit(*)的空实现,以便简化代码。

      注意,这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor),将遍历子节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。

    5、XPath支持

      DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择。

      public void bar(Document document) {

      List list = document.selectNodes( //foo/bar );

      Node node = document.selectSingleNode(//foo/bar/author);

      String name = node.valueOf( @name );

      }

      例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:

      public void findLinks(Document document) throws DocumentException {

      List list = document.selectNodes( //a/@href );

      for (Iterator iter = list.iterator(); iter.hasNext(); ) {

      Attribute attribute = (Attribute) iter.next();

      String url = attribute.getValue();

      }

      }

    6、字符串与XML的转换

      有时候经常要用到字符串转换为XML或反之,

      // XML转字符串

      Document document = ...;

      String text = document.asXML();

      // 字符串转XML

      String text = <name>James</name> </person>;

      Document document = DocumentHelper.parseText(text);

    7、用XSLT转换XML

      public Document styleDocument(

      Document document,

      String stylesheet

      ) throws Exception {

      // load the transformer using JAXP

      TransformerFactory factory = TransformerFactory.newInstance();

      Transformer transformer = factory.newTransformer(

      new StreamSource( stylesheet )

      );

      // now lets style the given document

      DocumentSource source = new DocumentSource( document );

      DocumentResult result = new DocumentResult();

      transformer.transform( source, result );

      // return the transformed document

      Document transformedDoc = result.getDocument();

      return transformedDoc;

      }

    8、创建XML

      一般创建XML是写文件前的工作,这就像StringBuffer一样容易。

      public Document createDocument() {

      Document document = DocumentHelper.createDocument();

      Element root = document.addElement(root);

      Element author1 =

      root

      .addElement(author)

      .addAttribute(name, James)

      .addAttribute(location, UK)

      .addText(James Strachan);

      Element author2 =

      root

      .addElement(author)

      .addAttribute(name, Bob)

      .addAttribute(location, US)

      .addText(Bob McWhirter);

      return document;

      }

    9、文件输出

      一个简单的输出方法是将一个Document或任何的Node通过write方法输出

      FileWriter out = new FileWriter( foo.xml );

      document.write(out);

      如果你想改变输出的格式,比如美化输出或缩减格式,可以用XMLWriter类

      public void write(Document document) throws IOException {

      // 指定文件

      XMLWriter writer = new XMLWriter( new FileWriter( output.xml ) );

      writer.write( document );

      writer.close();

      // 美化格式

    OutputFormat format = OutputFormat.createPrettyPrint();

    format.setEncoding(“GBK”);

    format.setIndex(“    ”)

      writer = new XMLWriter( System.out, format );

      writer.write( document );

      如何,DOM4J够简单吧,当然,还有一些复杂的应用没有提到,如ElementHandler等。如果你动心了,那就一起来用DOM4J。

    10、DOM4J解析XML文件实例

    package xml;
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.io.OutputStreamWriter;  
    import java.util.Iterator;  
    import java.util.List;  
    import org.dom4j.Attribute;  
    import org.dom4j.Document;  
    import org.dom4j.Element;  
    import org.dom4j.io.OutputFormat;  
    import org.dom4j.io.SAXReader;  
    import org.dom4j.io.XMLWriter;  
    public class Demo01 {
    public void test() throws Exception {  
            // 创建saxReader对象  
            SAXReader reader = new SAXReader();  
            // 通过read方法读取一个文件 转换成Document对象  
            Document document = reader.read(new File("src/dom4j/sida.xml"));  
            //获取根节点元素对象  
            Element node = document.getRootElement();  
            //遍历所有的元素节点  
            listNodes(node);  
            // 获取四大名著元素节点中,子节点名称为红楼梦元素节点。  
            Element element = node.element("红楼梦");  
            //获取element的id属性节点对象  
            Attribute attr = element.attribute("id");  
            //删除属性  
            element.remove(attr);  
            //添加新的属性  
            element.addAttribute("name", "作者");  
            // 在红楼梦元素节点中添加朝代元素的节点  
            Element newElement = element.addElement("朝代");  
            newElement.setText("清朝");  
            //获取element中的作者元素节点对象  
            Element author = element.element("作者");  
            //删除元素节点  
            boolean flag = element.remove(author);  
            //返回true代码删除成功,否则失败  
            System.out.println(flag);  
            //添加CDATA区域  
            element.addCDATA("红楼梦,是一部爱情小说.");  
            // 写入到一个新的文件中  
            writer(document);  
        }  
        /**
         * 把document对象写入新的文件
         *  
         * @param document
         * @throws Exception
         */  
        public void writer(Document document) throws Exception {  
            // 紧凑的格式  
            // OutputFormat format = OutputFormat.createCompactFormat();  
            // 排版缩进的格式  
            OutputFormat format = OutputFormat.createPrettyPrint();  
            // 设置编码  
            format.setEncoding("UTF-8");  
            // 创建XMLWriter对象,指定了写出文件及编码格式  
            // XMLWriter writer = new XMLWriter(new FileWriter(new  
            // File("src//a.xml")),format);  
            XMLWriter writer = new XMLWriter(new OutputStreamWriter(  
                    new FileOutputStream(new File("src//a.xml")), "UTF-8"), format);  
            // 写入  
            writer.write(document);  
            // 立即写入  
            writer.flush();  
            // 关闭操作  
            writer.close();  
        }  
        /**
         * 遍历当前节点元素下面的所有(元素的)子节点
         *  
         * @param node
         */  
        public void listNodes(Element node) {  
            System.out.println("当前节点的名称::" + node.getName());  
            // 获取当前节点的所有属性节点  
            List<Attribute> list = node.attributes();  
            // 遍历属性节点  
            for (Attribute attr : list) {  
                System.out.println(attr.getText() + "-----" + attr.getName()  
                        + "---" + attr.getValue());  
            }  
            if (!(node.getTextTrim().equals(""))) {  
                System.out.println("文本内容::::" + node.getText());  
            }
            // 当前节点下面子节点迭代器  
            Iterator<Element> it = node.elementIterator();  
            // 遍历  
            while (it.hasNext()) {  
                // 获取某个子节点对象  
                Element e = it.next();  
                // 对子节点进行遍历  
                listNodes(e);  
            }  
        }
        /**
         * 介绍Element中的element方法和elements方法的使用
         *  
         * @param node
         */  
        public void elementMethod(Element node) {  
            // 获取node节点中,子节点的元素名称为西游记的元素节点。  
            Element e = node.element("西游记");  
            // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点)  
            Element author = e.element("作者");
            System.out.println(e.getName() + "----" + author.getText());
            // 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。  
            List<Element> authors = e.elements("作者");  
            for (Element aut : authors) {  
                System.out.println(aut.getText());  
            }  
            // 获取西游记这个元素节点 所有元素的子节点。  
            List<Element> elements = e.elements();  
            for (Element el : elements) {  
                System.out.println(el.getText());  
            }  
        }
    }  


    sida.xml描述四大名著的操作

    <?xml version="1.0" encoding="UTF-8"?>  
    <四大名著>  
        <西游记 id="x001">  
            <作者>吴承恩1</作者>  
            <作者>吴承恩2</作者>  
            <朝代>明朝</朝代>  
        </西游记>  
        <红楼梦 id="x002">  
            <作者>曹雪芹</作者>  
        </红楼梦>  
    </四大名著>


     

    11、XSD、XSLT、DOM4J解析XML

    xml文件 000.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="000.xsl"?>
    <addresses>
     <value>
     <no>A100</no>
     <addr>上单位dd</addr>
     </value>
     <value>
      <no>A101</no>
      <addr>ss撒发达</addr>
     </value>
    </addresses>

    xsd文件 000.xsd

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:element name="addresses">
      <xs:complexType>
       <xs:sequence>
        <xs:element name="value" maxOccurs="unbounded">
         <xs:complexType>
          <xs:sequence>
           <xs:element name="no" type="xs:string" />
           <xs:element name="addr" type="addr" />
          </xs:sequence>
         </xs:complexType>
        </xs:element>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     
     <xs:simpleType name="addr">
      <xs:restriction base="xs:string">
       <xs:minLength value="1" />
       <xs:maxLength value="5" />
      </xs:restriction>
     </xs:simpleType>
    </xs:schema>

    xslt文件 000.xsl

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <!-- XSLT 语法参考w3cschool -->
     <xsl:template match="/">
      <html>
       <head>
        <title>First XSLT example</title>
       </head>
       <body>
        <p>
         <table border='1'>
          <xsl:for-each select="addresses/value">
           <tr>
            <td>
             <xsl:value-of select="no" />
            </td>
            <td>
             <xsl:value-of select="addr" />
            </td>
           </tr>
          </xsl:for-each>
         </table>
        </p>
       </body>
      </html>
     </xsl:template>
    </xsl:stylesheet>

    bean文件 XmlBean.java

    package com.zht.bean;
    public class XmlBean {
        private String no;   
        private String addr;   
        public String getNo() {   
            return no;   
        }   
        public void setNo(String no) {   
            this.no = no;   
        }   
        public String getAddr() {   
            return addr;   
        }   
        public void setAddr(String addr) {   
            this.addr = addr;   
        }   
        @Override  
        public String toString() {   
            return "编号:" + this.no + ",地址:" + this.addr;   
        }   
    }


    路径文件 ReadXmlFileStream.java

    package com.zht.xml;
    import java.io.InputStream;
    public class ReadXmlFileStream {
      private static final String XML_FILE = "com/zht/bean/000.xml";  
      private static final String XSD_FILE = "com/zht/bean/000.xsd";  
      private static final String XSL_FILE = "com/zht/bean/000.xsl";    
      private static final String HTML_FILE = "com/zht/bean/001.HTML";
         public static InputStream getXmlFileStream() {    
             return Thread.currentThread().getContextClassLoader()    
                     .getResourceAsStream(XML_FILE);    
         }
      public static String getXML_FILE() {
       return XML_FILE;
      }
      public static String getXSD_FILE() {
       return XSD_FILE;
      }
      public static String getXSL_FILE() {
       return XSL_FILE;
      }
      public static String getHTML_FILE() {
       return HTML_FILE;
      }    
    }


    解析xml文件 DOM4JParseXml.java

    package com.zht.xml;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.util.Iterator;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Templates;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.SAXValidator;
    import org.dom4j.io.XMLWriter;
    import org.dom4j.util.XMLErrorHandler;
    import com.zht.bean.XmlBean;
    public class DOM4JParseXml {
      private static XmlBean address = new XmlBean();    
         public static void main(String[] args) {   
    //     读取XML文件内容
    //      ---====================读xml文件========================================
             long starttime = System.currentTimeMillis();    
             try {    
                 InputStream in = ReadXmlFileStream.getXmlFileStream();    
                 Reader reader = new InputStreamReader(in, "utf-8"); // 注意编码问题      
                 SAXReader SaxReader = new SAXReader();    
                 Document doc = SaxReader.read(reader);    
                 Element root = doc.getRootElement();    
                 Element childNode = null;    
    //           枚举名称为value的节点    
                 for (Iterator<Element> it = root.elementIterator("value"); it.hasNext();) {    
                     childNode = (Element) it.next();    
                     address.setNo(childNode.elementText("no"));    
                     address.setAddr(childNode.elementText("addr"));    
                     System.out.println(address);    
                 }    
             } catch (Exception e) {    
                 e.printStackTrace();    
             }    
             System.out.println("运行时间:" + (System.currentTimeMillis() - starttime) + " 毫秒");    
    //    ---============================================================       
    //     写XML文件内容
             try {
        testWrite();
       } catch (Exception e) {
        e.printStackTrace();
       }    
    //      XML经XSD文件进行校验
             validateXMLByXSD();
                
    //      XML经XSLT转换为HTML文件
          String xml = ReadXmlFileStream.getXML_FILE();
          String xsl = ReadXmlFileStream.getXSL_FILE();
          String out = ReadXmlFileStream.getHTML_FILE();
          xsl(xml,out,xsl);
         }      
         /**   
          * 写XML   
          */  
         public static void testWrite() throws Exception{  
             Document document = DocumentHelper.createDocument();
             Element root = document.addElement("root");
             Element element1 = root.addElement("user")
             .addAttribute("name","Alexander")
             .addAttribute("blog", "http://netnova.blogjava.net")
             .addText("我是中文的名字");
             XMLWriter writer = new XMLWriter(new FileOutputStream("com/zht/bean/001.xml"));
             writer.write(document);
             writer.close();    
             System.out.println("写XML文件成功~!");
         }
         /**   
          * 通过XSD(XML Schema)校验XML   
          */  
         public static void validateXMLByXSD() {   
             String xmlFileName = ReadXmlFileStream.getXML_FILE();   
             String xsdFileName = ReadXmlFileStream.getXSD_FILE();   
             try {   
                 //创建默认的XML错误处理器    
                 XMLErrorHandler errorHandler = new XMLErrorHandler();   
                 //获取基于 SAX 的解析器的实例    
                 SAXParserFactory factory = SAXParserFactory.newInstance();   
                 //解析器在解析时验证 XML 内容。    
                 factory.setValidating(true);   
                 //指定由此代码生成的解析器将提供对 XML 名称空间的支持。    
    //             factory.setNamespaceAware(true);   
                 //使用当前配置的工厂参数创建 SAXParser 的一个新实例。    
                 SAXParser parser = factory.newSAXParser();   
                 //创建一个读取工具    
                 SAXReader xmlReader = new SAXReader();   
                 //获取要校验xml文档实例    
                 Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));   
                 //设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在 [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。    
                 parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");   
            parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "file:" + xsdFileName);   
                 //创建一个SAXValidator校验工具,并设置校验工具的属性    
                 SAXValidator validator = new SAXValidator(parser.getXMLReader());   
                 //设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。    
                 validator.setErrorHandler(errorHandler);   
                 //校验    
                 validator.validate(xmlDocument);
                 XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());   
                 //如果错误信息不为空,说明校验失败,打印错误信息    
                 if (errorHandler.getErrors().hasContent()) {   
                     System.out.println("XML文件通过XSD文件校验失败!");   
                     writer.write(errorHandler.getErrors());   
                     System.out.println(errorHandler.getErrors().asXML());
                 } else {   
                     System.out.println("Good! XML文件通过XSD文件校验成功!");   
                 }   
             } catch (Exception ex) {   
                 System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:" + xsdFileName + "检验失败。\n原因: " + ex.getMessage());   
                 ex.printStackTrace();   
             }   
         }
         /**   
          * 通过XSL生成HTML文件
          */  
         public static void xsl(String inFilename, String outFilename,
       String xslFilename) {
      try {
       TransformerFactory factory = TransformerFactory.newInstance();
       Templates template = factory.newTemplates(new StreamSource(
         new FileInputStream(xslFilename)));
       Transformer xformer = template.newTransformer();
       Source source = new StreamSource(new FileInputStream(inFilename));
       Result result = new StreamResult(new FileOutputStream(outFilename));
       xformer.transform(source, result);
       System.out.println("生成html成功~!");
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    }


    展开全文
  •  功能:通过 学生名单(学号、姓名) 与 博客名单(姓名、网址),自动生成HTML文件。  示例文件:学生名单、博客名单。  结果文件(示例):HTML文件。 运行结果 自动生成名单 101 蔡伟权(缺)  102 曹...

    构想

        很早就想写这个程序了,知道开学3周多了,才下定决心写完。

        功能:通过 学生名单(学号、姓名) 与 博客名单(姓名、网址),自动生成HTML文件。

        示例文件:学生名单博客名单

        结果文件(示例):HTML文件

    运行结果

    101 蔡伟权(缺)   102 曹翠芬       103 陈丹凤       104 陈桂强       105 陈家漫(缺)   

    106 陈镜宇         108 陈满东         110 邓  辉(缺)     114 洪境鹏         115 黄  彬(缺)    
    117 黄国滔(缺)     119 黄世安         120 黄世君(缺)     122 黄宇倩         124 江宗信(缺)    
    125 赖长青(缺)     127 梁官荣         128 梁文俊         129 廖始聪(缺)     130 廖  鋆        
    131 林  瀚         132 林骏琪         133 林镇填(缺)     134 刘  戈(缺)     135 刘威航        
    136 陆志翔(缺)     139 倪粤鹏         142 容文山         143 容永豪(缺)     144 施恒亮        
    145 谭永辉         146 韦林莹(缺)     148 吴辉平         150 吴郁鹏         151 吴韵杰(缺)    
    152 谢碧君         153 谢舒韵         154 谢志杰(缺)     155 许翠怡(缺)     156 杨溢涛        
    157 杨  媛(缺)     159 余文康         160 曾麒城         161 曾远辉         164 张玉婷        
    169 庄树填(缺)    

    使用方式

    (a)命令行。 编译 javac HtmlBlog.java ;运行 java HtmlBlog wl131.html student_list_wl131.txt blog_list_wl131.txt

    (b)Eclipse。 直接修改如下



    Java源码

    /**
     * (1)根据博客名单,自动生成HTML网页;每行5个数据
     * (2)判断博客地址是否符合要求,争取有纠错的功能
     * (3)判断有多少同学的博客没有,需要补充
     * 作者:丁又专
     * 时间:2014.03.26
     */
    package indi.dyz.html;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class HtmlBlog {
    	/**
    	 * @param args
    	 * @throws FileNotFoundException 
    	 */
    
    	/**
    	 * 功能:读取名单数据,保存到二维数组中
    	 * 输入文件名:要求是两列数据,其中第一行为说明
    	 * @param getList
    	 * @return
    	 * @throws FileNotFoundException
    	 */
    	public static String[][] getList(String fileName) throws FileNotFoundException{
    		//判断文件是否存在
    		File file = new File(fileName);
    		if(file.exists()==false){
    			System.out.println(fileName+"不存在,请检查该文件。");
    			return null;
    		}
    
    		String strTmp, strLine;
    		int numList = 0;
    		//判断一共有多少行数据
    		Scanner sc = new Scanner(file);
    		while(sc.hasNextLine()){
    			strTmp = sc.nextLine();	
    			if(strTmp.length()>0){
    				numList++;	//避免最后有空行
    			}			
    		}
    		sc.close();
    		numList = numList-1; //去掉首行说明
    
    		String[][] studentList = new String[2][numList];
    		int num = 0;
    		//读名单数据
    		sc = new Scanner(file);
    		strTmp = sc.nextLine();		//过滤首行
    		while(num<numList){
    			strLine = sc.nextLine();
    			//正则表达式进行分割,参考:字符串分割多个空格  http://blog.csdn.net/swarb/article/details/7402888
    			String[] strArray = strLine.split("\\s{1,}");
    			if(strArray.length==2) {
    				studentList[0][num] = strArray[0];
    				studentList[1][num] = strArray[1];
    			}
    			//System.out.println(num+" "+studentList[0][num] +":"+ studentList[1][num]);
    			num++;
    		}
    		sc.close();
    
    		return studentList;
    	}
    
    	/**
    	 * 功能:判断数组中有哪些重复元素。
    	 * @param args
    	 * @throws FileNotFoundException
    	 */
    	public static int getRepeat(String[] strArray){
    		int numRepeat = 0;				//重复元素个数
    		int numPre = 0, numLater = 0;	//插入元素前集合元素个数、插入后元素个数
    		//把元素放到一个集合中,如何集合元素个数没有增加,则此元素重复
    		HashSet<String> hs = new HashSet<String>();
    		for(String str:strArray){
    			hs.add(str);
    			numLater = hs.size();
    			if(numLater==numPre){
    				numRepeat++;
    				System.out.println("发现第"+numRepeat+"个重复元素:"+str+" 序号:"+numLater);
    			}
    			numPre = numLater;
    		}
    		return numRepeat;
    	}
    
    	/**
    	 * 功能:找到两个集合(A,B)中的差异元素,即在A中,不在B中
    	 * 思路:list1-list2,即集合的差,如A={1,2,3},B={1,3},则A-B={2}
    	 * @param args
    	 * @throws FileNotFoundException
    	 */
    	public static String[] getDiffElement(String[] list1, String[] list2){
    		HashSet<String> hs = new HashSet<String>();
    		for(String strTmp:list2){
    			hs.add(strTmp);
    		}
    
    		ArrayList<String> diffList = new ArrayList<String>(); 
    		for(String strTmp:list1){
    			if(hs.contains(strTmp)==false){
    				diffList.add(strTmp);
    			}
    		}
    
    		int num = diffList.size();
    		if(num>0){
    			String[] diff = new String[num];
    			for(int i=0; i<num; i++){
    				diff[i] = diffList.get(i);
    			}	
    			return diff;
    		}	
    
    		return null;
    	}
    
    	/**
    	 * 功能:利用正则表达式,判断博客网址是否符合规范
    	 * @param args
    	 * @throws FileNotFoundException
    	 */
    	public static boolean isCSDNBlog(String blog, String pattern){
    		//http://blog.csdn.net/u013899770, true
    		//http://write.blog.csdn.net/postlist, false
    		//本例:pattern = "(http://blog.csdn.net/){1}";
    
    		Pattern r = Pattern.compile(pattern);
    		// 现在创建 matcher 对象
    		Matcher m = r.matcher(blog);
    		if (m.find( )) {
    			//System.out.println(blog+" Found value: " + m.group(1) );
    			return true;
    		} else {
    			//System.out.println("==="+blog+" NO MATCH");
    			return false;
    		}
    	}
    
    	/**
    	 * 功能:写HTML文件,根据blog名单与学生名单,并输出没有找到的学生名单
    	 * @param args
    	 * @throws FileNotFoundException
    	 */
    	public static int writeHtml(String fileHtml, String fileStudent, String fileBlog, String pattern) throws FileNotFoundException{
    		//(1)创建HTML文件
    		PrintWriter pw = new PrintWriter(new File(fileHtml));
    		//(2)写HTML文件头
    		pw.println("<HTML>");
    		pw.println("<HEAD>");
    		pw.println("	<TITLE>自动生成名单</TITLE>");
    		pw.println("</HEAD>");
    		pw.println("<BODY>");
    
    		//(3)读取名单数据 与 博客数据
    		String[][] studentList = getList(fileStudent);
    		String[][] blogList = getList(fileBlog);
    
    		//读取每一个学生名字,判断其博客地址是否正确
    		//true:则保存到HTML文件
    		//false:则在名字上标注一下(缺)
    		String blankHtml = " ";
    		String defaultUrl = "http://blog.csdn.net/dyz1982";
    		String writeName = "";
    		String writeUrl = "";
    
    		int IDLen = studentList[0][0].length();
    
    		int numStu = studentList[0].length;
    		int numBlog = 0;
    		int t=0, k=0;
    		for(k=0; k<numStu; k++){
    			//通过student名字,找到blog中网址
    			String studentName = studentList[1][k].trim();
    			for(t=0; t<blogList[0].length; t++){
    				if(studentName.equalsIgnoreCase(blogList[0][t].trim()))
    					break;
    			}
    
    			if(IDLen<=3){
    				if(studentList[0][k].length()<2)
    					writeName = blankHtml+studentList[0][k];
    				else
    					writeName = studentList[0][k];
    			}
    			else writeName = studentList[0][k].substring(IDLen-3);
    
    			//判断姓名的字数,两个字的名字,中间加两个空格,为了美观
    			if(studentName.length()==2){
    				writeName += blankHtml + studentName.substring(0,1)+blankHtml+blankHtml+studentName.substring(1,2);
    			}else if(studentName.length()>=3){
    				writeName += blankHtml + studentName;
    			}
    
    			// blogList有地址,并且是符合规则的地址
    			if( (t<blogList[0].length) && (isCSDNBlog(blogList[1][t],pattern)) ){	
    				numBlog = numBlog+1;
    				writeUrl = blogList[1][t];
    				writeName = writeName + blankHtml+blankHtml+blankHtml+blankHtml;	//加4个空格,为了对齐
    			}else{
    				System.out.println(studentList[0][k]+studentName);
    
    				writeUrl = defaultUrl;
    				writeName = writeName + "(缺)";					
    			}
    
    			//写相应的HTML语句
    			pw.print("<a target=_blank target=\"_blank\" href=\""+writeUrl+"\">"+writeName+"</a>");
    			pw.println(blankHtml+blankHtml);
    			//如果有5个人,则换行
    			//最好的网络资源:http://www.w3school.com.cn/tags/tag_br.asp
    			if((k+1)%5==0){
    				pw.println("<br />");
    			}
    		}
    		//写HTML文件尾
    		/*
    				</BODY>
    				</HTML>
    		 */
    		pw.println("</BODY>"+"\n"+"</HTML>");
    		pw.close();
    
    		return numBlog;
    	}
    
    	/**
    	 * 功能:对计科的博客名单进行重新处理
    	 * @param args
    	 * @throws FileNotFoundException
    	 */
    	public static void modifyJkBlogFile(String fileStudent, String fileBlog) throws FileNotFoundException{
    		String[][] studentName = getList(fileStudent);
    		String[][] studentBlog = getList(fileBlog);
    
    		//先删除,再创建
    		File file = new File(fileBlog);
    		file.delete();
    		file = new File(fileBlog);
    
    		PrintWriter pw = new PrintWriter(file);
    		//把“201111621321” 替换为相应的姓名
    		//如果是201111621326吴叶英,则去掉前面的学号
    		pw.println("姓名    网址");
    		int i=0, j=0;
    		for(i=0; i<studentBlog[0].length; i++){
    
    			for(j=0; j<studentName[0].length; j++){
    				if(studentBlog[0][i].contains(studentName[0][j]))break;
    			}
    			System.out.println(studentName[1][j]+"  "+studentBlog[1][i]);
    			pw.println(studentName[1][j]+"  "+studentBlog[1][i]);
    		}
    		pw.close();
    	}
    
    	public static void main(String[] args) throws FileNotFoundException {
    		// TODO Auto-generated method stub
    
    		String fileStudent;
    		String fileBlog;
    		String fileHtml;
    		//查看命令行参数
    		if(args.length==3){
    			fileHtml = args[0];
    			fileStudent = args[1];
    			fileBlog = args[2];
    		}else{
    			fileHtml = "data/wl131.html";
    			fileStudent = "data/student_list_wl131.txt";
    			fileBlog = "data/blog_list_wl131.txt";
    		}
    
    		//读取文件数据
    		String[][] studentName = getList(fileStudent);
    		String[][] studentBlog = getList(fileBlog);
    
    		//查看是否存在没有提交博客地址的同学
    		String[] diffArray = getDiffElement(studentName[1], studentBlog[0]);
    		for(String str:diffArray){
    			System.out.println(str);
    		}
    
    		//查看博客地址是否准确,输出不准确的博客地址
    		String pattern = "(http://blog.csdn.net/){1}[0-9a-zA-Z]+";	//模式字符串
    		for(int i=0; i<studentBlog[1].length; i++){
    			boolean b = isCSDNBlog(studentBlog[1][i], pattern);
    			if(b==false) 
    				System.out.println(studentBlog[0][i]+": "+studentBlog[1][i]);
    		}
    
    		//写HTML文件
    		writeHtml(fileHtml, fileStudent, fileBlog, pattern);
    		
    		System.out.println("ok,end……");
    	}
    }
    










    展开全文
  • HTML5-定制input元素

    千次阅读 2016-08-20 18:17:36
    input元素可以生成一个供用户输入数据的简单文本框。其缺点在于用户在其中输入什么值都可以,可以配置type类型来获取额外的属性。其中type属性有23个不同的值,而input元素共有30个属性,其中许多属性只能与特定的...
  • vue动态生成表单元素

    千次阅读 2018-11-15 14:44:57
    前几天接了一个需求,需要动态生成一个表单数据,然后提交,提交完数据后。通过编辑按钮进入时,需要进行数据回填。 没生成表单前的状态 单机生成表单生成表单 根据选择方式展示不同的表单元素 如果从...
  • JS获取动态添加的元素

    万次阅读 2018-10-14 14:17:13
    在页面的渲染中,我们经常用遇到动态添加的DOM元素,那么在获取这些元素的时候或则为这些DOM元素的时候,我们有下面三种处理方法: // 1. 在模板引擎里面添加行内事件 // 2. 利用事件的委托获取(常用) // 3. 在ajax的...
  • 用Java抓取RSS生成Mobi文件发送到Kindle

    千次阅读 2014-02-06 19:11:48
    一个抓取 rss / atom / feed 并生成适合kindle阅读的mobi格式文件服务
  • jquery 获取相同id元素个数

    千次阅读 2018-09-19 10:59:15
    做了个项目,有个多节点元素复制的功能,复制出来的元素id肯定是相同的,生成效果如下侧代码,现在需要获取id为conf的元素数量,这里列了3个方式。 HTML &lt;div id='conf' class="conf"&gt; ...
  • 1、服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器。 2、如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件,这样反而会降低...
  • 用js动态生成html页面

    万次阅读 2018-04-04 11:19:06
    首先思路明确:生成元素是一个完整的DOM对象;这些DOM对象的属性可以是字符串,xml文件,也可以是json格式的数据,存储在后台或者其它位置;通过层层解析,顺着DOM层级关系动态创建在html文档流中;这些html文档放...
  • 在项目需求中,需要对于一个word模板文档生成相对应的word文件,而此word模板是多页的并且需要在最终文件生成相应的目录,由于项目环境是Linux,所以舍弃了jacob(windows环境)。然后主要是研究了Apache poi 进行...
  • Java 浅析,生成OFD文件

    千次阅读 2019-05-24 18:03:00
    摘要:这几天遇到个需要,需要提供用户下载电子证照,最简单的方法实现:word做了一份模板,利用网页工具转成OFD文件,http://www.yozodcs.com/page/example.html用7Z工具解压ofd文件,压缩使用WinZip,压缩的时候不能...
  • AngularJS中获取ng-repeat动态生成的ng-model值

    万次阅读 多人点赞 2016-05-19 18:05:53
    angularJS动态设置model,并设置/获取model的值 代码html 用例集全局参数配置 <table class="table table-hov
  • 参考文章: ... 解析xml文件的的文章很多,但是Android里生成xml文件的文章就很少了。偶然机会找到一篇相关发面的文章,就分享一下了: 用到的主要是XmlSerializer,利用它来写xml文件
  • markdownpad2:输出Html时自动生成目录TOC

    千次阅读 2017-12-30 12:43:34
    参考这篇文章的代码,自己做了些简化修改,暂时满足我的使用: 《为MarkdownPad2的HTML输出也增加目录》 将下面的代码加入选项/高级/自定义HTML header即可 document.addEventListener(... // 生成目录列表 va
  • C++生成和解析XML文件

    万次阅读 2017-07-31 16:39:48
    2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预定义。需要自行定义标签 XML与HTML区别 1.xml 不是 html 的替代。 2.xml 和 html 为不同的目的而设计: 3.xml 被...
  • 从 Java 应用程序动态生成 PDF 文件

    千次阅读 2016-04-21 20:26:36
    转载自:http://www.ibm.com/developerworks/cn/opensource/os-javapdf/index.html ...如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库。开源的 iText 库使得 PDF 的创建变得轻松易行。本文介绍了 iText
  • Itext生成PDF文件加密与加水印

    千次阅读 2012-07-11 09:22:23
    public class PdfConvertor { //txt原始文件的路径 private static final String txtFilePath = "d:/Itext/test.txt";... //生成的pdf文件路径 private static final String pdfFilePath = "d:/Itext/test.pdf";
  • java生成 excel 并导出文件

    万次阅读 多人点赞 2016-11-18 10:10:10
    给大家介绍一个代码在线自动生成的网站:www.5ceo.cn技术之家 或者加qq群: 527796869 目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和JavaExcel当前B/S模式已成为应用开发的主流,而在企业...
  • Axure RP Pro - 相关问题 - ...因此为了调整生成原型的效果,就需要调整线框中的设计,但是AxureRPPro中并不是HTML/CSS设计工具,在线框中并不支持所有CSS,此时就可以通过自行修改生成的原型中的CSS文件来实现所需要
  • highcharts动态获取数据生成柱状图

    千次阅读 2014-07-15 14:32:01
    使用Highcharts控件实现柱状图,前端显示主要使用Highchartst图表库,后端使用SpringMVC框架从数据库获取数据,前后端数据交互采用Json数据格式,由于篇幅问题数据库代码就不提供了。主要代码如下:   1. 在页面...
  • Java生成 excel 并导出文件

    千次阅读 2018-07-12 14:17:24
    目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel下面我就分别讲解一下如何使用这两个...Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各...
  • javaweb应用求写一个简单的servlet,里面生成一个存有数据的list,在html页面获取到这个list,并展示这个list中的元素,求贴出所有源码
  • 生成一个百度HTML如下,并窗口创建的时候执行 ``` <!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> body, html,#allmap {width: 100%;height: ...
  • 创建ArcGIS Engine自定义工具类,生成地图元素。一些地图元素与数据框中的数据相关。此类元素包括指北针、比例尺、比例文本和图例。
  • HTML页面生成图片

    万次阅读 2018-05-21 00:28:16
    Today,客户又又又提出一个需求:"这个页面我要一个图片,要能下载的... html2canvas通过获取页面的DOM和元素的样式信息,并将其渲染成canvas图片,从而实现给页面截图的功能。   其实它的用法非常简单,有的...
  • 2. jQuery 代码,可以直接放到 js 文件中。 jQuery(document).ready(function($){ $('.comment-reply-link').click(function() {  //获取回复者的id  var atid = '"#' + $(this).parent
  • pom.xml配置文件所有标签及作用简单描述

    千次阅读 多人点赞 2017-03-21 18:26:02
    我转载的是关于pom.xml文件中会使用到的基本上所有的标签以及标签的作用简单描述。 可能我们自己的项目所使用到的标签总数量不及此文的一半。 我转载仅为方便你我他学习之用,众喷子们,还请指下留情,轻喷。 因为此...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,260
精华内容 74,504
关键字:

获取表所有元素生成html文件