1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
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.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; public class XMLCloneTest { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); // 複製元の XML ドキュメントの作成 Element root = document.createElement("root"); document.appendChild(root); Element e1 = document.createElement("e1"); root.appendChild(e1); e1.setAttribute("a1", "data1"); e1.appendChild(document.createTextNode("hoge")); // 複製元の XML のrootノードを取得 // Node hoge = document.getFirstChild(); NodeList hogehoge = document.getElementsByTagName("root"); Node hoge = hogehoge.item(0); // ひとまず内容を表示 printXML(document, "document"); // XML ドキュメントの複製 Document documentClone = builder.newDocument(); // スタイルシート追加 ProcessingInstruction pi = documentClone.createProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"style.xsl\""); documentClone.appendChild(pi); //Node n = root.cloneNode(true); Node clone = documentClone.importNode(hoge, true); documentClone.appendChild(clone); // e1 要素のデータを変更してみる NodeList list = documentClone.getElementsByTagName("e1"); list.item(0).setTextContent("uga"); // それぞれの XML ドキュメントの内容を表示 ( 複製した側で内容を変更しても、複製元の内容は変わっていないことが確認できます ) printXML(document, "document"); printXML(documentClone, "documentClone"); } private static void printXML(Document d, String name) throws Exception { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(d); StreamResult result = new StreamResult(System.out); System.out.println("----- " + name + " -----"); transformer.transform(source, result); System.out.println(""); } } |
スポンサーリンク