xmlファイルの中身を文字列に変換する
xmlファイルを読みこんで、文字列に変換する処理です。
用途としてはSOAP通信でxmlを渡したい時などに使えるかと思います。
hoge.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?> <hogehoge> <hoge> <name>hogepuge</name> <address>hogepuge</address> </hoge> </hogehoge>
XmlTransfar.java
package xmlTransfar;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
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.Node;
import org.w3c.dom.NodeList;
public class XmlTransfar {
public static void main(String[] args) throws Exception {
StringBuffer sb = new StringBuffer();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// ドキュメントの妥当性を検証しない
factory.setValidating(false);
// xml名前空間をサポートするように指定する
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
// XMLファイルの指定
Document doc = builder.parse(
"file:C:/hoge.xml");
Element element = doc.getDocumentElement();
// 親ノードから読み込む
Node node = element.getParentNode();
sb.append(convertToString(node));
// 読み込み結果
System.out.println("読み込み結果");
System.out.println(sb);
}
/**
* ノードの要素値を文字列に変換します。 ノード内にタグが含まれている場合、そのタグは自動整形されます。
* @param node 変換対象の文字列
* @return 変換後文字列
* @throws TransformerException XML規約に違反している場合に発生する例外
*/
public static String convertToString(
Node node) throws TransformerException {
// ノードをXMLとして定義します
DOMSource source = new DOMSource(node);
// 文字列生成用ストリーム
StringWriter swriter = new StringWriter();
StreamResult result = new StreamResult(swriter);
// XMLを文字列に変換します
transform(source, result);
return swriter.toString();
}
/**
* XML変換エンジン呼び出しです。
* @param source 変換対象のXML
* @param result 変換後文字列
* @throws TransformerException XML規約に違反している場合に発生する例外
*/
private static void transform(Source source,
Result result) throws TransformerException {
// 変換エンジンを取得します
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
// XML変換のルールを設定します
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
// 変換
transformer.transform(source, result);
}
}
結果
読み込み結果 <hogehoge> <hoge> <name>hogepuge</name> <address>hogepuge</address> </hoge> </hogehoge>
参考になったところ
(xmlを文字列に変換するところはそのまま使わせてもらっています。
githubにソースをあげてあります。
xmlTransfar


コメントを書く