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年代に比べると、志願者は半減している、というデータもある。
基本計画は、教育現場で理数系科目の学習を充実させるなど、国民の科学技術への関心を高める施策が必要、としている。対策を急がないと、科学技術創造立国を支える人がいなくなる。
戻る