目次へ

解答例 - 実習課題3 - 7.DOMと名前空間

(実習課題3)

以下のXMLを出力するプログラムを作成しなさい。

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<m:customer xmlns:m="http://www.techscore.com/customerMessage/">
<m:name>山田太郎</m:name>
<m:age>31</m:age>
</m:customer>
</soapenv:Body>
</soapenv:Envelope>
  • プログラムの実行時に、顧客名と年齢を指定可能にする。
  • 1番目の引数に顧客名を指定する。指定した顧客名は、name要素の内容となる。
  • 2番目の引数に年齢を指定する。指定した年齢はage要素の内容となる。

解答例

package com.techscore.dom.chapter7.exercise3;

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.Attr;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * NamespaceXmlCreator.java
 * 
 * TECHSCORE Java XML DOM XSLT 7章 実習課題3
 * 
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

public class NamespaceXmlCreator {

    public static void main(String[] args) throws Exception {
        if (args.length < 2) {
            System.out.println("Usage: java NamespaceXmlCreator NAME AGE");
            return;
        }

        String envelope_namespace_uri = "http://schemas.xmlsoap.org/soap/envelope/";
        String customer_namespace_uri = "http://www.techscore.com/customerMessage/";
        String xmlns_namespace_uri = "http://www.w3.org/2000/xmlns/";

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
        DOMImplementation domImpl = builder.getDOMImplementation();
        Document document = domImpl.createDocument(envelope_namespace_uri,
                                                   "Envelope",
                                                   null);

        Element envelope = document.getDocumentElement();
        Attr envelopeDeclare = document.createAttributeNS(xmlns_namespace_uri,
                                                          "soapenv");
        envelopeDeclare.setPrefix("xmlns");
        envelopeDeclare.setValue(envelope_namespace_uri);
        envelope.setAttributeNodeNS(envelopeDeclare);
        envelope.setPrefix("soapenv");

        Element body = document.createElementNS(xmlns_namespace_uri, "Body");
        body.setPrefix("soapenv");

        envelope.appendChild(body);

        Element customer = document.createElementNS(customer_namespace_uri,
                                                    "customer");
        customer.setPrefix("m");
        Attr customerTagDeclare = document.createAttributeNS(xmlns_namespace_uri,
                                                             "m");
        customerTagDeclare.setPrefix("xmlns");
        customerTagDeclare.setValue(customer_namespace_uri);
        customer.setAttributeNodeNS(customerTagDeclare);

        body.appendChild(customer);

        Element name = document.createElementNS(customer_namespace_uri, "name");
        name.setPrefix("m");
        name.appendChild(document.createTextNode(args[0]));
        customer.appendChild(name);

        Element age = document.createElementNS(customer_namespace_uri, "age");
        age.setPrefix("m");
        age.appendChild(document.createTextNode(args[1]));
        customer.appendChild(age);

        TransformerFactory transFactory = TransformerFactory.newInstance();
        Transformer transformer = transFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.ENCODING, "EUC-JP");
        DOMSource source = new DOMSource(document);
        StreamResult result = new StreamResult(System.out);
        transformer.transform(source, result);
    }
}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp