CDATAセクションの取出し方

戻る

処理したXMLはこちら。

import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
import java.util.*;

/**
* $Id: CDATAParsingTest.html,v 1.1 2009/06/22 16:11:39 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class CDATAParsingTest {

    public static void main( String[] args ) throws Exception {

        final String source = "sample.xml";

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        //------------------------------------------------------------------------------------
        // 【重要】 -- CDATAノードの取り出し方です --
        // このファクトリで作成されたパーサが CDATA ノードを Text ノードに変換し、
        // それを隣接 (存在する場合) Text ノードに追加するように指定します。
        // デフォルトでは、この値は false に設定されます。
        //------------------------------------------------------------------------------------
        factory.setCoalescing( true );

        //------------------------------------------------------------------------------------
        // ドキュメントビルダーを生成
        //------------------------------------------------------------------------------------
        DocumentBuilder builder = factory.newDocumentBuilder();

        //----------------------------------------------------------------
        // パースを実行してDocumentオブジェクトを取得
        //----------------------------------------------------------------
        Document doc = builder.parse( source );

        System.out.println( "【XMLのバージョン】" + doc.getXmlVersion() );
        System.out.println( "【文書のエンコーディング】" + doc.getXmlEncoding() );

        // ルート要素を取得(タグ名:rss)
        Node root = doc.getDocumentElement();

        System.out.println( "【ルート要素のタグ名】" + ( ( Element ) root ).getTagName() );
        System.out.println( "【ルート要素の属性】" + ( ( Element ) root ).getAttribute( "version" ) );

        traverse( root );

    }

    private static void traverse( Node root ) {

        // 子要素のリストを取得
        Node childNode = root.getFirstChild();

        while ( childNode != null ) {
            String nodeName = childNode.getNodeName();

            if ( "article".equals( nodeName ) ) {
                // System.out.println( nodeName );
                parseArticle( childNode );
            }

            childNode = childNode.getNextSibling();
        }

    }

    private static void parseArticle( Node node ) {
        String id = ( ( Element ) node ).getAttribute( "id" ) ;
        System.out.println( node.getNodeName() + "id=" + id );

        // 子要素のリストを取得
        Node childNode = node.getFirstChild();

        while ( childNode != null ) {
            String nodeName = childNode.getNodeName();

            // System.out.println( nodeName );
            System.out.println( childNode.getNodeValue() );

            childNode = childNode.getNextSibling();
        }


    }
}

■実行結果

$ java -cp . CDATAParsingTest

【XMLのバージョン】1.0
【文書のエンコーディング】Shift_JIS
【ルート要素のタグ名】content
【ルート要素の属性】1.5.0
articleid=1

		 
沖縄地方はこれから1週間、前線や気圧の谷の影響でぐずついた天気が続く見込みで、沖縄気象台は「沖縄地方が梅雨入りしたとみられる」と発表しました。沖縄地方の梅雨入りは、平年より6日、去年より12日遅くなっています。
(05/14 10:13)
	 	 
		 
<a href="http://www2.alc.co.jp/ejr/index.php?word_in=%8D%8B%8FB&word_in2=%82%A9%82%AB%82%AD%82%AF%82%B1&word_in3=PVawEWi72JXCKoa0Je>リンク先</a>です。

豪州 
【国名】Australia〔国名は、オーストラリア連邦(Commonwealth of Australia)。◆首都はキャンベラ。面積は日本の20倍。人口約1800万(英国国教徒、カソリック教徒、そのほかのキリスト教徒が1/4ずつ)。濠州は昭和前期以前の漢字表記。◆〈参考〉Australian States and Territories〕 
	 	 
	
articleid=2

		 

<img src="http://www.yomiuri.co.jp/ad/img/ad1_hd_news2.gif" alt="広告"/>

[科学技術計画]「成果を生む人材を育てられるか」

 日本の産業を支える科学技術を、一層伸ばしたい。

 今後5年間の科学技術政策を定めた「第3期科学技術基本計画」が始まった。

 厳しい財政状況にもかかわらず、5年間に投じる予算総額として、25兆円という大きな目標を掲げている。1期の17兆円、2期の24兆円を上回る。

 初年度となる2006年度も、3兆5733億円と巨額の予算を確保した。

 この投資を十分に生かして、日本が目指す「科学技術創造立国」を実現しなくてはならない。

 そのためになすべき課題は、大きく二つある。成果を社会に還元する仕組みの構築と、優秀な人材の確保だ。第3期計画も、これを基本政策としている。

 どちらも、容易ではない。

 大学などの研究開発は、もともと、すぐ製品化につながるものではない。巨大な実験装置の建設なども、どんな成果が上がったか、見えにくい。「研究のための研究」と、産業界から批判が強い。

 基本計画を策定した政府の総合科学技術会議は、こうした批判に応えて、研究課題ごとに具体的な目標を設定した。日本の大型ロケットH2Aの打ち上げ成功率を90%にするなど、273の課題で目標を掲げている。

 総合科学技術会議は、目標通り研究開発が進んでいるかどうか評価する体制を整える。成果がなければ、従来のようにズルズルと続けず、進め方を修正し、場合によっては思い切って廃止するなど厳しい姿勢で臨むべきだ。

 273課題のうち、革新的ながん治療の開発など62件は、当初から、予算を集中投資する「戦略重点科学技術」に指定されている。社会的な必要性が高いためだ。実現へ、後押しが求められる。

 基礎研究も育てなくてはならない。すぐに成果が見えなかったり、目標を設定できなかったりしても、そこから革新的な科学技術が生まれることがある。

 米国は、10年間で基礎研究費を倍増させる方針を打ち出している。総合科学技術会議も基礎研究の充実策を検討し始めた。早急に結論を出す必要がある。

 人材確保も課題は多い。そもそも科学技術への国民の関心が薄れている。大学進学でも、工学系を中心に理工系を目指す生徒は、ここ数年、減る一方だ。1990年代に比べると、志願者は半減している、というデータもある。

 基本計画は、教育現場で理数系科目の学習を充実させるなど、国民の科学技術への関心を高める施策が必要、としている。対策を急がないと、科学技術創造立国を支える人がいなくなる。
	 	 
	
戻る inserted by FC2 system