ホームページ >バックエンド開発 >XML/RSS チュートリアル >Java の XML ファイルの解析、ノードの追加、削除操作の概要

Java の XML ファイルの解析、ノードの追加、削除操作の概要

高洛峰
高洛峰オリジナル
2017-01-11 14:52:502432ブラウズ

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 操作の 3 つのメソッド (読み取り、書き込み、削除) を見てください。それらの初期化ステートメントは同じです。

builder = factory.newDocumentBuilder(); 
Document doc=builder.parse(path); 
doc.normalize();

最初は同じ部分を取り出してコンストラクターに書くつもりでしたが、テスト中にこれが常に null ポインターエラーになることがわかりました (長い間気になっていました)。

builder = factory.newDocumentBuilder();

ビルダーの初期化ステートメントに置くと、読み込みには問題ありませんが、書き込みや削除の際にエラーが報告されます
ということで、今はこんな感じで書いてます。良い方法は思いつきませんでした。将来必要になるかもしれないので、最初にここに投稿します

XML ファイルの解析、ノードの追加、操作の削除に関するその他の Java 関連の記事については、 PHPの中国語サイトです!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。