2011年计算机二级JAVA知识点:Java与XML联合编程之DOM篇

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  我们希望在上面的XML文件中加入一个新的link节点,因而首先还是要读入links.xml文件,构建一个DOM树,然后再对这个DOM树进行修改(添加节点),最后把修改后的DOM写回到links.xml文件中:

  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

  DocumentBuilder builder=factory.newDocumentBuilder();

  Document doc=builder.parse("links.xml");

  doc.normalize();

  //---取得变量----

  String text="Hanzhong's Homepage";

  String url="www.hzliu.com";

  String author="Hzliu Liu";

  String discription="A site from Hanzhong Liu, give u lots of suprise!!!";

  为了看清重点,简化程序,我们把要加入的内容硬编码到记忆String对象中,而实际操作中,往往利用一个界面来提取用户输入,或者通过JDBC从数据库中提取想要的内容。

  Text textseg;

  Element link=doc.createElement("link");

  首先应该明了的是,无论什么类型的Node,Text型的也好,Attr型的也好,Element型的也好,它们的创建都是通过Document对象中的createXXX()方法来创建的(XXX代表具体要创建的类型),因此,我们要向XML文档中添加一个link项目,首先要创建一个link对象:

  Element linktext=doc.createElement("text");

  textseg=doc.createTextNode(text);

  linktext.appendChild(textseg);

  link.appendChild(linktext);

  Element linkurl=doc.createElement("url");

  textseg=doc.createTextNode(url);

  linkurl.appendChild(textseg);

  link.appendChild(linkurl);

  Element linkauthor=doc.createElement("author");

  textseg=doc.createTextNode(author);

  linkauthor.appendChild(textseg);

  link.appendChild(linkauthor);

  java.util.Calendar rightNow = java.util.Calendar.getInstance();

  String day=Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH));

  String month=Integer.toString(rightNow.get(java.util.Calendar.MONTH));

  String year=Integer.toString(rightNow.get(java.util.Calendar.YEAR));

  Element linkdate=doc.createElement("date");

  Element linkdateday=doc.createElement("day");

  textseg=doc.createTextNode(day);

  linkdateday.appendChild(textseg);

  Element linkdatemonth=doc.createElement("month");

  textseg=doc.createTextNode(month);

  linkdatemonth.appendChild(textseg);

  Element linkdateyear=doc.createElement("year");

  textseg=doc.createTextNode(year);

  linkdateyear.appendChild(textseg);

  linkdate.appendChild(linkdateday);

  linkdate.appendChild(linkdatemonth);

  linkdate.appendChild(linkdateyear);

  link.appendChild(linkdate);

  Element linkdiscription=doc.createElement("description");

  textseg=doc.createTextNode(discription);

  linkdiscription.appendChild(textseg);

  link.appendChild(linkdiscription);

  创建节点的过程可能有些千篇一律,但需要注意的地方是,对Element中所包含的text(在DOM中,这些text也是代表了一个Node的,因此也必须为它们创建相应的node),不能直接用Element对象的setNodeValue()方法来设置这些text的内容,而需要用创建的Text对象的setNodeValue()方法来设置文本,这样才能够把创建的Element和其文本内容添加到DOM树中。看看前面的代码,你会更好的理解这一点:

  doc.getDocumentElement().appendChild(link);

  最后,不要忘记把创建好的节点添加到DOM树中。Document类的getDocumentElement()方法,返回代表文档根节点的Element对象。在XML文档中,根节点一定是唯一的。

  TransformerFactory tFactory =TransformerFactory.newInstance();

  Transformer transformer = tFactory.newTransformer();

  DOMSource source = new DOMSource(doc);

  StreamResult result = new StreamResult(new java.io.File("links.xml"));

  transformer.transform(source, result);

  然后就是用XSLT把DOM树输出了。这里的TransformerFactory也同样应用了工厂模式,使得具体的代码同具体的变换器无关。实现的方法和DocumentBuilderFactory相同,这儿就不赘述了。Transformer类的transfrom方法接受两个参数、一个数据源Source和一个输出目标Result。这里分别使用的是DOMSource和StreamResult,这样就能够把DOM的内容输出到一个输出流中,当这个输出流是一个文件的时候,DOM的内容就被写入到文件中去了。

  点击查看:2011年计算机二级考试JAVA知识点整理汇总

上一页345下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答