XML的DOM编程
来源:互联网 发布:太原java培训机构排名 编辑:程序博客网 时间:2024/05/06 06:50
package jp.go.ssid.sss.common;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class SssCommon {
public SssCommon() {
}
/** SssCommon实例 */
private static SssCommon sssCommon = null;
/** XML Document */
private Document doc = null;
/** 機能名:XML解析 */
private final String KINOU_NM_SSSCOMMON = "XML解析";
/**
* コンストラクタ。
* @param stream ストリーム
* @param validate 検証の有無
*/
private SssCommon(ByteArrayInputStream stream, boolean validate) throws Exception {
try {
// DOMパーサ用ファクトリの生成
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 検証
factory.setValidating(validate);
// DOM Documentインスタンス用ファクトリの生成
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析とDocumentインスタンスの取得
doc = builder.parse(stream, SssPropertyReader.getProperty(SssNames.PROP_BASE_URI));
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
SssLogSender.error(e, KINOU_NM_SSSCOMMON, SssMessage.SSS_DETAIL_ERR_MSG_001, this.getClass());
throw e;
}
}
/**
* コンストラクタ。
* @param filepath ファイルパス
*/
private SssCommon(String filepath) throws Exception {
try {
// DOMパーサ用ファクトリの生成
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 検証
factory.setValidating(true);
// DOM Documentインスタンス用ファクトリの生成
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析とDocumentインスタンスの取得
doc = builder.parse(filepath);
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* SssCommon インスタンスの生成
* @param stream ストリーム
* @return SssCommonのインスタンス
*/
public static SssCommon getInstance(ByteArrayInputStream stream) throws Exception {
return getInstance(stream, true);
}
/**
* SssCommonのインスタンスの生成
* @param stream ストリーム
* @param validate 検証の有無
* @return SssCommonのインスタンス
*/
public static SssCommon getInstance(ByteArrayInputStream stream, boolean validate) throws Exception {
sssCommon = new SssCommon(stream, validate);
return sssCommon;
}
/**
* SssCommonのインスタンスの生成
* @param filepath ファイルパス
* @return SssCommonのインスタンス
*/
public static SssCommon getInstance(String filepath) throws Exception {
sssCommon = new SssCommon(filepath);
return sssCommon;
}
/**
* 引数で指定されたパスに存在する最初のノード値を返します。
*
* @param path ロケーションパス
* @return 指定ノードの値
*
*/
public String getNodeValue(String path) throws Exception {
try {
// Nodeの取得
Node node = XPathAPI.selectSingleNode(doc, path);
if (node == null) {
throw new NullPointerException("PATH = " + path);
}
Node child = node.getFirstChild();
if (child == null) {
return "";
}
return (child.getNodeValue()).trim();
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* 引数で指定されたパスに存在する最初のノードに値を設定します。
*
* @param path ロケーションパス
* @param value 設定する値
*/
public void setNodeValue(String path, String value) throws Exception {
try {
// Nodeの取得
Node node = XPathAPI.selectSingleNode(doc, path);
if (node == null) {
throw new NullPointerException("PATH = " + path);
}
Node child = node.getFirstChild();
if (child == null) {
node.appendChild(doc.createTextNode(value));
} else {
child.setNodeValue(value);
}
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* 引数で指定されたパスに存在するノードの数を返します。
* @param path ロケーションパス
* @return ノードの数
*/
public int getNodeListSize(String path) throws Exception {
try {
// NodeListの取得
NodeList list = XPathAPI.selectNodeList(doc, path);
if (list == null) {
return 0;
} else {
return list.getLength();
}
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* ノードを削除する。
* @param path ロケーションパス
*/
public void removeNodes(String path) throws Exception {
try {
Node node = XPathAPI.selectSingleNode(doc, path);
if (node == null) {
throw new NullPointerException("PATH = " + path);
}
Node parent = node.getParentNode();
NodeList nodeList = XPathAPI.selectNodeList(doc, path);
if ((parent != null) && (nodeList != null)) {
for (int i = 0; i < nodeList.getLength(); i++) {
Node child = XPathAPI.selectSingleNode(doc, path);
if (child != null) {
parent.removeChild(child);
}
}
}
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* 指定したノードに新しい子ノードを追加する。
* @param path ロケーションパス
* @param childnode 追加する子ノード
*/
public void appendChildNode(String path, String childnode) throws Exception {
try {
Node node = XPathAPI.selectSingleNode(doc, path);
if (node == null) {
throw new NullPointerException("PATH = " + path);
}
Element element = doc.createElement(childnode);
node.appendChild(element);
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* 指定したノードに新しいノードとテキストノードを追加する。
* @param path ロケーションパス
* @param childnode 追加する子ノード
* @param value 追加するテキストノード
*/
public void appendChildNode(String path, String childnode, String value) throws Exception {
try {
Node node = XPathAPI.selectSingleNode(doc, path);
if (node == null) {
throw new NullPointerException("PATH = " + path);
}
Element element = doc.createElement(childnode);
element.appendChild(doc.createTextNode(value));
node.appendChild(element);
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
/**
* XMLデータを文字列で返します。
* @return XMLデータの文字列
*/
public String getDocument() throws Exception {
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
if (doc.getDoctype() != null && doc.getDoctype().getSystemId() != null) {
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());
}
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream out = new ByteArrayOutputStream();
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
return out.toString("utf-8");
} catch (Exception e) {
//XMLの解析でエラーが発生したことをログに出力する
throw e;
}
}
}
- XML的DOM编程
- JAVA的XML编程(dom)
- JAVA 的XML编程DOM解析
- xml文件 DOM编程
- XML编程-DOM
- Java-dom编程:操作xml
- dom 编程(html和xml)
- XML编程接口的比较:DOM SAX JDOM JAXP
- XML编程接口的比较:DOM SAX JDOM JAXP
- XML编程接口的比较:DOM SAX JDOM JAXP
- XML编程接口的比较:DOM SAX JDOM JAXP
- XML编程中dom解析与sax解析的区别
- 03-JavaWeb-XML-xml编程-dom解析
- xml的dom解析
- XML的Dom解析
- XML的解析DOM
- XML的DOM解析
- HTML DOM和XML DOM的区别
- SSL被访问的服务器端编程
- java.util.Stack翻译
- 依赖关系的注入问题
- Boot INI Options Reference
- 我的收藏夹
- XML的DOM编程
- Java如何调用可执行文件和批处理命令
- 是J2EE还是.Net,选择您的技术平台 -- 一个平台的凸现
- 是J2EE还是.Net,选择您的技术平台 -- .Net正在推动新一代电子政府
- 是J2EE还是.Net,选择您的技术平台 -- 怎样选择你的未来?
- Resources for Social Network
- 想来 深圳 从事软件开发的请进!!!!
- 葵花宝典:软件开发高手是这样炼成的!
- Hibernate条件查询(Criteria Query)