本文通過使用jaxp的方式來實作對于xml檔案的增删改查操作,以最基礎和簡單的來做為執行個體,所操作的xml檔案為person.xml,代碼如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
<p1>
<name>nike</name>
<age>23</age>
</p1>
<p1>
<name>tom</name>
<age>25</age>
</p1>
</person>
因為友善的關系,這裡将這些操作放在同一個java檔案中,通過函數的方式進行調用,代碼如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
public class Textjaxp {
public static void main(String[] args) throws Exception {
//getNameValue(); //擷取xml中标的簽值
//getSingleNameValue(); //擷取xml中某個标簽值
//addNode(); //添加節點
//removeNode(); //修改節點
//deleteNode(); //删除節點
showAllNodeName(); //周遊所有節點,使用遞歸的思想
}
private static void showAllNodeName() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//建立Xml解析器工廠
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//建立Xml解析器
Document doc = builder.parse("src/person.xml");
//解析xml傳回document
show(doc);
}
private static void show(Node node) {
if(node.getNodeType()==Node.ELEMENT_NODE){
System.out.println(node.getNodeName());
}
//判斷是否為節點
NodeList list = node.getChildNodes();
for(int i=;i<list.getLength();i++)
{
Node node1 = list.item(i);
show(node1);//遞歸調用
}
}
private static void deleteNode() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse("src/person.xml");
NodeList list = doc.getElementsByTagName("sex");
Node sex = list.item();
Node parent = sex.getParentNode();
parent.removeChild(sex);
//xml回寫(隻要xml檔案有改動都需要回寫操作,否則結果不會改動xml檔案)
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
}
private static void removeNode() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse("src/person.xml");
NodeList list = doc.getElementsByTagName("sex");
Node sex1 = list.item();
sex1.setTextContent("nan");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult("src/person.xml"));
}
private static void addNode() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList list = document.getElementsByTagName("p1");
Node p1 = list.item();
Element sex1 = document.createElement("sex");
Text text1 = document.createTextNode("nv");
sex1.appendChild(text1);
p1.appendChild(sex1);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
}
private static void getSingleNameValue() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse("src/person.xml");
NodeList list = doc.getElementsByTagName("name");
Node name = list.item();
String nameValue = name.getTextContent();
System.out.println(nameValue);
}
private static void getNameValue() throws Exception {
// TODO Auto-generated method stub
DocumentBuilderFactory buliBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = buliBuilderFactory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList names = document.getElementsByTagName("name");
for(int i =;i<names.getLength();i++)
{
Node name = names.item(i);
String namevalue = name.getTextContent();
System.out.println(namevalue);
}
}
}