package testxml.TestDOM;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
public class TestDOM {
public static void main(String[] args)
{
TestDOM dom = new TestDOM();
}
public TestDOM()
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException ex) {
Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);
}
String path = this.getClass().getResource("/testxml/TestDOM/Link.xml").getFile();
File f = new File(path);
Document document = null;
try {
document = builder.parse(f);
document.normalize();
} catch (SAXException ex) {
Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);
}
Element root = document.getDocumentElement(); //links
System.out.println("::"+root.getNodeName());
//writeXML(document,f); //写XML文件
//调试getFirstChild() getNextSibling()方法、文本对象
// System.out.println(root.getFirstChild().getFirstChild().getFirstChild().getNodeValue());
// Text t = (Text)root.getFirstChild().getLastChild().getFirstChild();
// System.out.println(t.getParentNode().getPreviousSibling().getFirstChild().getNextSibling().getFirstChild().getNodeValue());
//遍历所有节点1
//readChildNodesShow(root);
//遍历所有节点2
readSiblingShow(root);
//递归方式1
//recurChildNodesShow(root);
//递归方式2
//recurSiblingShow(root);
}
//得到节点属性
public void getAttribute(Node node)
{
NamedNodeMap nodeMap = node.getAttributes(); //links得到属性
for(int i=0;i < nodeMap.getLength();i++)
{
System.out.println("::"+nodeMap.item(i));
}
System.out.println();
}
//普通读XML1
public void readChildNodesShow(Node node)
{
NodeList linkList = node.getChildNodes(); //link集合
System.out.println("linkList大小:"+linkList.getLength());
for(int i =0;i< linkList.getLength();i++)
{
Element link = (Element)linkList.item(i); //link
System.out.println("::"+link.getNodeName());
NodeList elemList = link.getChildNodes(); //elem集合
for(int j = 0;j < elemList.getLength();j++)
{
Element elem = (Element)elemList.item(j); //elem
if(!(elem.getFirstChild() instanceof Text))
{
NodeList elemList1 = elem.getChildNodes();
for(int k = 0;k < elemList1.getLength();k++)
{
Element elem1 = (Element)elemList1.item(k);
System.out.print("::");
System.out.println(elem1.getTextContent());
}
}
else
{
System.out.print("::");
System.out.println(elem.getTextContent());
}
}
System.out.println();
}
}
//普通读XML2
public void readSiblingShow(Node node)
{
for(Node node0 = node.getFirstChild();node0 !=null;node0 = node0.getNextSibling() )
{
Element link = (Element)node0;
System.out.print("::");
System.out.println(link.getTextContent());
for(Node node1 = link.getFirstChild();node1!=null;node1 = node1.getNextSibling())
{
Element elem = (Element)node1;
if(!(elem.getFirstChild() instanceof Text))
{
for(Node node2 = elem.getFirstChild();node2!=null;node2 = node2.getNextSibling())
{
Element elem1 = (Element)node2;
System.out.print("::");
System.out.println(elem1.getTextContent());
}
}
System.out.print("::");
System.out.println(elem.getTextContent());
}
System.out.println();
}
}
//递归读XML1
public void recurChildNodesShow(Node node)
{
System.out.print("");
System.out.println(node.getTextContent());
int i;
if(!(node.getFirstChild() instanceof Text))
{
NodeList elemList = node.getChildNodes();
for(i =0 ;i < elemList.getLength();i++)
{
recurChildNodesShow(elemList.item(i));
}
System.out.println();
}
}
//递归读XML2
public void recurSiblingShow(Node node)
{
System.out.print("");
System.out.println(node.getTextContent());
if(!(node.getFirstChild() instanceof Text))
{
for(Node temp = node.getFirstChild();temp!=null;temp = temp.getNextSibling())
{
recurSiblingShow(temp);
}
System.out.println();
}
}
//写XML
public void writeXML(Document doc,File f)
{
String text = "xuemei";
String url = "http://mxdxm.iteye.com";
String author = "maxin";
String description = "maxin is xuemei";
Element link = doc.createElement("link");
Element linktext = doc.createElement("text");
Text textseg = doc.createTextNode(text);
//textseg.setData("maxin"); //创建完text之后,才能设值。
linktext.appendChild(textseg);
//linktext.getFirstChild().setNodeValue("mei");//创建完text之后,才能设值。
Element linkurl = doc.createElement("url");
Text urlseg = doc.createTextNode(url);
linkurl.appendChild(urlseg);
Attr urlattr = doc.createAttribute("newWindow"); //创建属性
Text attrseg = doc.createTextNode("No");
urlattr.setNodeValue(attrseg.getNodeValue());
linkurl.setAttributeNode(urlattr);
Element linkauthor = doc.createElement("author");
Text authorseg = doc.createTextNode(author);
linkauthor.appendChild(authorseg);
Calendar currentTime = Calendar.getInstance();
String day = Integer.toString(currentTime.get(Calendar.DAY_OF_MONTH)); //13
String month = Integer.toString(currentTime.get(Calendar.MONTH)); //2
String year = Integer.toString(currentTime.get(Calendar.YEAR)); //1
Element linkdate = doc.createElement("date");
Element dateday = doc.createElement("day");
Text dayseg = doc.createTextNode(day);
dateday.appendChild(dayseg);
Element datemonth = doc.createElement("month");
Text monthseg = doc.createTextNode(month);
datemonth.appendChild(monthseg);
Element dateyear = doc.createElement("year");
Text yearseg = doc.createTextNode(year);
dateyear.appendChild(yearseg);
linkdate.appendChild(dateday);
linkdate.appendChild(datemonth);
linkdate.appendChild(dateyear);
Element linkdes = doc.createElement("description");
Text desseg = doc.createTextNode(description);
linkdes.appendChild(desseg);
Attr linkattr = doc.createAttribute("name");
linkattr.setNodeValue("4");
link.setAttributeNode(linkattr);
link.appendChild(linktext);
link.appendChild(linkurl);
link.appendChild(linkauthor);
link.appendChild(linkdate);
link.appendChild(linkdes);
Element root = (Element)doc.getDocumentElement();
root.appendChild(link);
TransformerFactory tFactory = TransformerFactory.newInstance();
try {
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(f);
transformer.transform(source, result);
} catch (TransformerConfigurationException ex) {
Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);
} catch (TransformerException ex) {
Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
XML文件和DTD文件的存放的本地目录为:F:\Document\java\maxin\src\testxml\TestDOM\LinkDTD.dtd
XML文件和DTD文件存放在下面的附件中:
下载次数: 7
分享到:
2010-08-13 20:19
浏览 1201
评论