• 締切済み

JavaでのXMLパーサの使用について

javaでパーサを使ってDOMツリーを作成したいのですが、パーサインスタンスが作成できずにエラーがでてしまいます。ちなみにコンパイルは通ります。 以下にソースとエラー内容を記述しますので、もしよろしかったらどなたか教えて下さい。 import java.io.*; import com.ibm.xml.parsers.*; import org.xml.sax.*; import org.w3c.dom.*; public static void main(String[] args){ try{      //XML文書作成 String xml = "<sample>Hello Java World</sample>"; //DOMパーサ作成 DOMParser parser = new DOMParser(); //入力ストリーム作成      StringReader sr = new StringReader(xml); InputSource is = new InputSource(sr); //パースする parser.parse(is); //ドキュメントを得る Document doc = parser.getDocument(); //トップレベル要素を得る Element el = doc.getDocumentElement(); System.out.println("Top Level Element: " + el.getTagName()); } catch(Exception e){ e.printStackTrace(); } } エラー内容: java.lang.NoClassDefFoundError: com.ibm.xml.parsers.DOMParser java.lang.Throwable(java.lang.String) java.lang.Error(java.lang.String) java.lang.LinkageError(java.lang.String) java.lang.NoClassDefFoundError(java.lang.String) void pkxml.dom.PsDomBean.makedom() void pkxml.dom.PsDomBean.makedom() void pkxmlsutabu.Sutabu.main(java.lang.String [])

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

コンパイルは通るというのがよくわからないのですが、 あと、出てるエラーもクラスがないというのはわかりますが、 なんか変なスタックトレースですね。 使ってるパーサも。IBM製ですか、これは。 私は多分回答できないと思いますが、 開発環境を詳しく書かないと、 このエラーの原因はわからないと思います。 IDEとか使ってるんでしょうか。

mmn77_777
質問者

補足

回答ありがとうございます。 補足としまして、開発環境は VisualAge for Java(プロフェッショナル) バージョン 4.0 Build 0620 IV3-5 JDK1.2.2 を用いています。

  • onchange
  • ベストアンサー率20% (5/24)
回答No.1

お使いのパーサーってざーしずですかね。 クラスパスが通ってないとかじゃないですよね・・・。 根本的な解決ではないので回答ではないのですが、アドバイスというか、そんな感じで書き込みします。 JDK1.4だと標準でXML関係のAPIが入っているので、ご参考にその場合のソースと結果を。 import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.InputSource; public class XMLTest { public static void main(String[] args){ try{    //XML文書作成 String xml = "<sample>Hello Java World</sample>"; //入力ストリーム作成 StringReader sr = new StringReader(xml); InputSource is = new InputSource(sr); //ドキュメントビルダの生成 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); //パースしてDOMのオブジェクトを取得する Document doc = builder.parse(is); //トップレベル要素を得る Element el = doc.getDocumentElement(); System.out.println("Top Level Element: " + el.getTagName()); } catch(Exception e){ e.printStackTrace(); } } } 結果: D:\temp\test\bin>java XMLTest Top Level Element: sample D:\temp\test\bin> となります。

mmn77_777
質問者

補足

回答ありがとうございます。 補足としまして、開発環境は VisualAge for Java(プロフェッショナル) バージョン 4.0 Build 0620 IV3-5 JDK1.2.2 を用いています。

関連するQ&A

  • Xercesを使ったjavaでのXML解析

    DOMを使ってXML文書を解析するJavaのソースコードで、DOMパーサは、クラス org.apache.xerces.parsers.DOMParserで参照している下記のプログラムで、 [Fatal Error] :17:109: The entity name must immediately follow the '&' in the entity reference. org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 109; The entity name must immediately follow the '&' in the entity reference. のエラーが出てしまって、解決策が分かりかねています。Javaのネットワークプログラミングに詳しい方、御教示願えればと思います。 package nikkei; import java.io.ByteArrayInputStream; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class TwitterSearch { public static void main(String[] args) throws Exception { TwitterSearch search = new TwitterSearch(); search.search("日経ソフトウエア"); } public void search(String keyword) throws Exception { SearchAPIClient client = new SearchAPIClient(); String xml = client.execute(keyword); parse(xml); } private void parse(String xml) throws Exception { DOMParser parser = new DOMParser(); try { parser.parse(new InputSource(new ByteArrayInputStream(xml.getBytes()))); Document doc = parser.getDocument(); NodeList entries = doc.getElementsByTagName("entry"); for (int i = 0; i < entries.getLength(); i++) { String name = null; String tweet = null; Element entry = (Element) entries.item(i); NodeList titleList = entry.getElementsByTagName("title"); if (titleList.getLength() == 1) { tweet = titleList.item(0).getTextContent(); } NodeList authorList = entry.getElementsByTagName("author"); if (authorList.getLength() == 1) { Element author = (Element) authorList.item(0); NodeList nameList = author.getElementsByTagName("name"); if (nameList.getLength() == 1) { name = nameList.item(0).getTextContent(); } } System.out.println(name + "さんのツイート"); System.out.println("\t" + tweet); } } catch (Exception e) { e.printStackTrace(); } } } package nikkei; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; public class SearchAPIClient { public String execute(String keyword) throws Exception { String url = "https://twitter.com/search?q=" + keyword; HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); if (entity != null) { return EntityUtils.toString(entity); } else { return null; } } } よろしくお願いいたします。

    • ベストアンサー
    • Java
  • XMLパーサの種類について混乱してます

    XSLTをいじる必要に駆られて、現在Java1.4+JAXP1.1を利用しています。 いままで、javax.xml.transformをimportしてメソッドを実行するだけで、「変換系に何を使っているのか」については全く気にしていなかったのですが、その実体は何なのでしょうか? (XTとかXalanとか、単体の変換系がありますよね・・・?) また、DOMパーサ、SAXパーサもJAXPで使えますが、各々のパーサや変換系を集めてパッケージにしたものがJAXPなんでしょうか。 さらに、勉強中にXMLパーサという単語が出てきて混乱しています。XMLパーサは、DOM・SAX・XSLT等とは違うのでしょうか? (XMLパーサと名乗っているXercesは何に使うのでしょうか・・・) DTDとの関連も含めて解説して頂けたら嬉しいです。

    • ベストアンサー
    • Java
  • DOMでパースしているXML全体の出力方法

    お世話になります。 JavaでDOMを使ってXML操作をしたいと考えております。 おおよそ、以下のソースでparseできるところまで確認できました。 DOMParser parser = new DOMParser(); parser.parse("XMLファイルパス"); Document doc = parser.getDocument(); 開発中なので、DOM操作した結果のXMLを随時コンソールやログに 出力させたいのですが、たとえばdoc.toString()してもnullとなり、 正常に出力されません。 以下のようにElementを取得すると正常にアクセスできていることは 確認しています。 Element rootEl = doc.getDocumentElement(); System.out.println(rootEl.getNodeName()); なお、DOMライブラリにはxercesを用いております。 Dom4jのAPIも見てみましたが、それらしいメソッドを見つけることが できていません。 簡単にXMLを出力できることが理想です。 一般的な方法、よくやる手法など、みなさんよりご教示頂きたいです。

    • ベストアンサー
    • Java
  • jdkで使用されているXMLパーサ

    いつもお世話になります。 jdkで使用されているXMLパーサは何なのでしょうか。 javaでXMLを操作するに当たり、jaxpというapiが用意されていますが、jaxpはあくまでdomやsaxの 実装クラスをラップしたものだという認識でいます。 では何の実装クラスが使われているのでしょうか。各パージョンで何が使われているのか知りたいです。 また、ここら辺の事を説明しているサイトがあれば教えて頂けると嬉しいです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • JavaによるXMLの読み込みについて

    現在、JavaでXMLを読みたく色々なサイト様を参考にさせて頂き プログラムを作成しております。 その結果、下記のようなプログラムで要素名を取得することは出来たのですが、 「属性名」と「属性の値」を読み込み表示することが中々上手くいきません。 どこに何を追加したらよいでしょうか。宜しければ教えて下さい。 -- sample.java -- sample.xml -------------------------------------- import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*; import java.io.*; public class sample { public static void main(String[] argv) { sample a = new sample(); a.runner(); } final static String file = "sample.xml"; public void runner() { DocumentBuilderFactory factory; DocumentBuilder builder; Node root; try { factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); factory.setIgnoringElementContentWhitespace(true); factory.setIgnoringComments(true); factory.setValidating(true); root = builder.parse(file); showNodes(root, " "); } catch (ParserConfigurationException e0) { System.out.println(e0.getMessage()); } catch (SAXException e1){ System.out.println(e1.getMessage()); } catch (IOException e2) { System.out.println(e2.getMessage()); } } public void showNodes(Node node, String space) { NodeList nodes = node.getChildNodes(); for (int i=0; i<nodes.getLength(); i++) { Node node2 = nodes.item(i); if(!node2.getNodeName().equals("#text")){ System.out.println(space + "<" + node2.getNodeName() + ">"); showNodes(node2, space + " "); } } } }

    • ベストアンサー
    • Java
  • Eclispe上でXML書込み可能が、E以外出来ず

    Eclispe上では、任意の値を、例えば(ex.xml等)に書込み可能なのですが、 ランナブルjarにして、デスクトップ上に他ファイルも含めて置き、jarを起動して、 XMLに書込みしようとしても書込みできません。 XMLは標準で作成してます(windows7 Home edition 管理者権限で動作 JDK1.7.0_05)。 色々調査しましたが原因不明です。 読み込みは問題ありません。XSLTにも関連していないようです。 何が違うのでしょうか? みなさま、よろしくお願いいたします。 ソースは以下の通り、 import java.io.File; import java.io.IOException; 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 javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; public class XMLBasic { /*-------------------------* * Variables. * *-------------------------*/ /*----- For XML -----*/ /* XSL */ final static String XSL_FILE="resource\\style.xsl"; /**/ static Element element; /*-------------------------* * Methods. * *-------------------------*/ /*----- Rewrite -----*/ public static void rw(String value, String tagName, int itemNum, String xmlFileName, String xslFileName) { Document document=null; try { document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(xmlFileName)); } catch (SAXException e) { } catch (IOException e) { } catch (ParserConfigurationException e) {} document.getElementsByTagName(tagName).item(itemNum).getFirstChild().setNodeValue(value); TransformerFactory tfactory=TransformerFactory.newInstance(); Transformer transformer=null; try { transformer=tfactory.newTransformer(new StreamSource(new File(xslFileName))); } catch (TransformerConfigurationException e) {} try { transformer.transform(new DOMSource(document), new StreamResult(new File(xmlFileName))); } catch (TransformerException e) {} } }

    • ベストアンサー
    • Java
  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • DOMParserを使いたいのですが

    こんにちは。 毎回初心者な質問で恐縮です。。 javaの中でXMLから特定のデータを抽出して表示したいのでインターネット上でサンプルがないか探していたところ、「アットマーク・アイティ」のホームページでちょうどよいものを見つけたのでそれを参考に作成しはじめたのですが、 DOMParser parser = new DOMParser(); という記述があり、ここでコンパイルがとまってしまいます。 import org.apache.xerces.parsers.*; がなかったのかと思い、記述を追加したところ今度は「パッケージは存在しません」と言われてしまいます。 jarファイルが足りないのかと調べていたのですが、このパッケージを使うために何が必要なのか参考資料がみつかりません。 「xerces」や「Parser」で調べたところ、自分のTOMCATのフォルダ内の\common\endorsedのフォルダ内に「xercesImpl.jar」「xmlParserAPIs.jar」がありました。 何がたりないのかご存知の方、教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JavaでXMLをファイルからじゃなく扱いたい

    Javaで例えば、String変数に String str = "<xml sample>hogehoge</xml sample>" みたいにXML形式のデータが入っているとして、このデータを、XMLファイルをDOMで扱う時のように扱えないでしょうか?一度、ファイルに書きだして、XMLファイルとして読み込ませないと難しいでしょうか?

    • ベストアンサー
    • Java
  • JavaからXMLプロセッサを使うとは?

    JavaでXMLを処理する必要に駆られまして、一念発起して勉強しています。 XMLを処理するためには、JavaのAPIがあってそれを利用するというのはokで、処理方法にはDOM・SAX・XSLTといったものがあるというのもわかりました。 ただ、DOMやSAXが、Javaプログラムからデータを読む手助けをするためのモノというのはわかるのですが、XSLTはただの変換とどう違うのでしょうか? 本を読む限り、XSLの規則にしたがって変換するもの。となっていて、読み込ませる→変換結果が出てくる、で、なんだかHTMLの生成くらいにしか使えないような印象なのですが、Javaとタッグを組んでデータを処理させたい場合、どんな使われ方をするのでしょうか。 DOMやSAXでも良いじゃんと言われそうなのですが、HTMLも同時に扱う必要があるため、ぜひ習得したいのです。 ですが、市販のJava本はほとんどXMLパーサ関係ばかりで・・・。また、何かいい参考書もあったら教えていただきたいと思います。

    • ベストアンサー
    • Java

専門家に質問してみよう