>  기사  >  백엔드 개발  >  Java의 XML 파일 구문 분석, 노드 추가 및 삭제 작업 요약

Java의 XML 파일 구문 분석, 노드 추가 및 삭제 작업 요약

高洛峰
高洛峰원래의
2017-01-11 14:52:502359검색

1. Java 코드:
주로 DOM을 사용하여 작업합니다.

package test; 
import java.io.IOException; 
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.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Text; 
import org.xml.sax.SAXException; 
public class XmlOprate { 
Document doc; 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
NodeList imags; 
String path; 
public NodeList getImags() { 
return imags; 
} 
public void setImags(NodeList imags) { 
this.imags = imags; 
} 
/** 
* 构造方法 
* @param path:xml文件的路径 
* @param nodes:要解析的xml节点名称 
*/ 
public XmlOprate(String path) { 
super(); 
this.path = path; 
System.out.println(System.getProperty("user.dir")); 
} 
/** 
* 解析XML 
* @param path 
*/ 
public void readXml(){ 
try { 
builder = factory.newDocumentBuilder(); 
Document doc=builder.parse(path); 
doc.normalize(); 
NodeList imags =doc.getElementsByTagName("imags"); 
this.setImags(imags); 
for (int i=0;i<imags.getLength();i++){ 
Element link=(Element) imags.item(i); 
System.out.print("title: "); 
System.out.println(link.getElementsByTagName("title").item(0).getFirstChild().getNodeValue()); 
System.out.print("URL: "); 
System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue()); 
System.out.print("imgsrc: "); 
System.out.println(link.getElementsByTagName("imgsrc").item(0).getFirstChild().getNodeValue()); 
System.out.println(); 
} 
}catch (ParserConfigurationException e) { 
e.printStackTrace(); 
} catch (SAXException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
/** 
* addCode 
* @param path 
*/ 
public void addXmlCode(String imgsrc,String title,String url){ 
try { 
builder = factory.newDocumentBuilder(); 
Document doc=builder.parse(path); 
doc.normalize(); 
Text textseg; 
Element imag=doc.createElement("imags"); 
Element linkimgsrc=doc.createElement("imgsrc"); 
textseg=doc.createTextNode(imgsrc); 
linkimgsrc.appendChild(textseg); 
imag.appendChild(linkimgsrc); 
Element linktitle=doc.createElement("title"); 
textseg=doc.createTextNode(title); 
linktitle.appendChild(textseg); 
imag.appendChild(linktitle); 
Element linkurl=doc.createElement("url"); 
textseg=doc.createTextNode(url); 
linkurl.appendChild(textseg); 
imag.appendChild(linkurl); 
doc.getDocumentElement().appendChild(imag); 
TransformerFactory tFactory =TransformerFactory.newInstance(); 
Transformer transformer; 
transformer = tFactory.newTransformer(); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new java.io.File(path)); 
transformer.transform(source, result); 
}catch(Exception e){ 
} 
} 
/** 
* delete xml code 
* @param path 
*/ 
public void delXmlCode(){ 
try { 
builder = factory.newDocumentBuilder(); 
doc=builder.parse(path); 
doc.normalize(); 
NodeList imags =doc.getElementsByTagName("imags"); 
Element elink=(Element) imags.item(0); 
elink.removeChild(elink.getElementsByTagName("imgsrc").item(0)); 
elink.removeChild(elink.getElementsByTagName("title").item(0)); 
elink.removeChild(elink.getElementsByTagName("url").item(0)); 
doc.getFirstChild().removeChild(elink); 
TransformerFactory tFactory =TransformerFactory.newInstance(); 
Transformer transformer = tFactory.newTransformer(); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new java.io.File(path)); 
transformer.transform(source, result); 
} catch (ParserConfigurationException e) { 
e.printStackTrace(); 
} catch (SAXException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} catch (TransformerConfigurationException e) { 
e.printStackTrace(); 
} catch (TransformerException e) { 
e.printStackTrace(); 
} 
} 
}

2. XML 부분

<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
<imags> 
<imgsrc>images/ad-01.jpg</imgsrc> 
<title>胡志明市</title> 
<url>http://torchrelay.beijing2008.cn/cn/journey/hochiminhcity/</url> 
</imags> 
<imags> 
<imgsrc>images/ad-02.jpg</imgsrc> 
<title>香港2</title> 
<url>http://torchrelay.beijing2008.cn/cn/journey/hongkong/</url> 
</imags> 
</root>

3. 올바른 xml을 살펴보세요. 연산 세 가지 메소드(읽기, 쓰기, 삭제), 초기화 문은 모두 동일합니다.

builder = factory.newDocumentBuilder(); 
Document doc=builder.parse(path); 
doc.normalize();
처음에는 같은 부분을 꺼내서 생성자에 쓰려고 했는데 알고보니 테스트하는 동안 이것은 항상 널 포인터 오류를 보고합니다(오랫동안 나를 괴롭혔습니다).

하지만

builder = factory.newDocumentBuilder();

을 초기화 문에 넣었습니다. 빌더에서는 읽히지 않는 문제가 있는데 쓰거나 삭제할 때 오류가 발생합니다.
그래서 지금은 이렇게 작성했는데 좋은 방법이 생각나지 않네요. 여기에 먼저 올렸습니다.

Java의 XML 파일 분석, 노드 추가 및 삭제 작업에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.