Java Tips – DOM – XMLドキュメントの要素に属性を追加するには


DOM(Document Object Model)を使用して、XMLドキュメントの要素に属性を追加する手順は以下の通りです。

  1. DocumentクラスのcreateElementメソッドを使用して、要素を生成します。
  2. ElementクラスのsetAttributeメソッドを使用して、上記で生成した要素に属性を設定します。

package net.tk_factory.example.xml.dom;

import java.io.File;

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.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import net.tk_factory.example.AbstractExample;

/**
 * DOM(Document Object Model)を使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>XMLドキュメントの要素に属性を設定します。</li>
 * </ol>
 *
 * @author Takafumi Kondo (TK Factory)
 */
public class ExampleSetAttribute extends AbstractExample
{
    /** クラス名 */
    private static final String CLASS_NAME =
            ExampleSetAttribute.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
            Logger.getLogger(ExampleSetAttribute.class.getName());

    /** 出力ファイル名 */
    private static final String OUT_FILE_NAME =
            EXAMPLE_FILE_DIRECTORY +  CLASS_NAME + ".xml";

    /**
     * ExampleSetAttributeオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected ExampleSetAttribute()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * mainメソッドです。<br/>
     *
     * @param args 引数
     */
    public static void main(String[] args)
    {
        LOGGER.info("[START]" + CLASS_NAME);

        try
        {
            //XMLドキュメントを作成する
            DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docbuilder = dbfactory.newDocumentBuilder();
            Document document = docbuilder.newDocument();

            //ルート要素を作成する
            Element root = document.createElement("root");
            document.appendChild(root);

            //ルート要素に子要素を追加する
            Element child = document.createElement("child");
            //子要素に属性を設定する
            child.setAttribute("attr", "1");
            root.appendChild(child);

            //XMLドキュメントをファイルに出力する
            TransformerFactory tfactory = TransformerFactory.newInstance();
            Transformer transformer = tfactory.newTransformer();
            File file = new File(OUT_FILE_NAME);
            transformer.transform(new DOMSource(document), new StreamResult(file));
        }
        catch (ParserConfigurationException ex)
        {
            //DocumentBuilderオブジェクトの作成に失敗した場合
            LOGGER.error(getStackTrace(ex));
        }
        catch (TransformerConfigurationException ex)
        {
            //Transformerオブジェクトの作成に失敗した場合
            LOGGER.error(getStackTrace(ex));
        }
        catch (TransformerException ex)
        {
            //XMLドキュメントをファイルに出力する際にエラーが発生した場合
            LOGGER.error(getStackTrace(ex));
        }

        LOGGER.info("[E N D]" + CLASS_NAME);
    }
}

作成されるXMLファイルは以下通りです。

<?xml version="1.0" encoding="UTF-8"?><root><child attr="1"/></root>

関連記事

  1. ソースを見直し、一部、修正しました。

  1. トラックバック 0

return top