• 締切済み

DOMで要素の値がNULL

どなたか教えてください・・・。 import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.SAXException; ~途中略 xmlPath="test.xml"; DocumentBuilder docBld = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc=docBld.parse(xmlPath); ここで、docの内容を見るとNULLになっています。 この後、 Element el = doc.getDocumentElement(); とすると、しっかりタグ名は取れるにも関わらず 値はNULLになってしまいます。 もちろん例外は何もスローされません。 何が起きているのかさっぱりです。 初めてパーサーにチャレンジしているということもあり、 見当もつかずに戸惑ってばかりです。 確認するところなどがあれば教えてください。 よろしくお願いします。

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

みんなの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> ここで、docの内容を見るとNULLになっています。 「doc の内容」って何? getNodeValue() で取得したもの、ということでしょうか? であれば、null なのは仕様通りです(→参考URL の Node のマニュアルを参照のこと)。 > この後、 > Element el = doc.getDocumentElement(); > とすると、しっかりタグ名は取れるにも関わらず > 値はNULLになってしまいます。 ここでいう「値」も getNodeValue() で返ってくるもののことですね。 あなたが言う「内容」or「値」というのは、きっと「テキストノード」のことですね。 それは、Element の子供として、Text がぶら下がっており、その「値」が あなたの欲しいものです(きっと)。 <TEST>テスト</TEST> という内容の XML を DOM にするとどういうふうになるでしょうか? ちょろっと書いてみましたので、動かしてみて。 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader("<TEST>てすと</TEST>"))); Element e = doc.getDocumentElement(); System.out.println(e.getNodeName()); System.out.println(e.getNodeValue()); Text tx = (Text)e.getFirstChild(); System.out.println(tx.getNodeName()); System.out.println(tx.getNodeValue());

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/org/w3c/dom/Node.html
parser
質問者

お礼

a-kumaさん、 言葉足らずにも関わらず、解読していただきまして有難うございました。 Nullは正当なのですね。 頂いたソース、表示されました。 もっと勉強して、また色々悩んでいきたいと思います。 助かりました。

関連するQ&A

  • DOMツリーの作り方。

    XMLのDOMツリーをjavaで作りたいです。 ---Root.xmlファイル--- <?xml version="1.0!> <root></root> ------ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); Document root = builder.parse("c:/tmp/Root.xml"); /*rootの子ノードとして新しいノード(title)を追加していく*/ といったやり方があると思うんですが、 そうではなく、プログラム内でrootドキュメントを作ってtitle子ノードを追加していきたいんです。 つまり、Root.xmlに頼りたくないということなんですが、どうしたらよいでしょうか?

    • 締切済み
    • XML
  • StringからDOMのElementオブジェクトを作成したい

    Stringから、DOMのDocumentオブジェクトを作成する場合は 以下のようにしますよね。 DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(new StringReader("<a/>"))); DocumentではなくElementオブジェクトを作成したいのですが、 どのようにすればよいでしょうか?そもそも、Elementオブジェクト を作成することは可能なんでしょうか? DOMでなく、JDOMでもよいので作成する方法を教えていただけないでしょうか。

    • ベストアンサー
    • Java
  • XMLの読み込み

    DocumentBuilderFactory,DocumentBuilder等を使って XMLドキュメントの読み込みを行っています。 例えば、以下の様なXMLドキュメントがあった時 <text>内の読み込みを行うと、テキストテキスト2と なってしまいます。 「テキスト<p/><p/>テキスト2」として取得したいのですが 何かいい方法ないでしょうか? ----------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <root> <text> テキスト<p/><p/>テキスト2</text> </root> ----------------------------------------- それとも、XMLドキュメント上、「<p/>」に意味があるのでしょうか? ※プログラム一部抜粋 //-- DOMオブジェクト初期化 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); //-- XMLファイル読み込み this.doc = docBuilder.parse(new File(strPath)); this.doc.getDocumentElement().normalize();

    • ベストアンサー
    • Java
  • XMLの処理について

    javaでxmlをsoapで投げる処理をしています。 <クライアント> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); Document doc = builder.parse( new File( "test.xml" ) ); Element elm = doc.getDocumentElement(); result = WebService( elm ); <サーバ> public Object WebService( Element elm ) { return 'elmを処理した結果'; } このクライアントの処理をperlで行いたいのですが、可能でしょうか?  : $service = SOAP::Lite->Service( "xxx.wdsl" ); open( XML, "test.xml" ); @xml = <XML>; ?? ここの処理はどうすれば ?? result = $service.WebService( @xml );  :

  • ストリング文字列をDocumentオブジェクトに格納したい

    文字列として受け取ったxmlをDocumentオブジェクトに格納したいと考えて DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(ファイルパス); とすればファイルを取得してDocumentオブジェクトに入れることはできたのですが、ファイルパスではなくString文字列としてxmlを受け取った場合、どのようにすればDocumentオブジェクトに格納できるのかわかりません。 どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • 何故かNoFoundClassExceptionになってしまうのですが…

    import uCommon.*; import org.w3c.dom.Document; import javax.xml.parsers.*; import org.apache.crimson.tree.*; public class ParaFile { static String strFile; public static void main(String[] args) { if (args.length==0) { System.out.println("ファイル名を指定してください!"); System.exit(0); } strFile = args[0]; OpenXmlDoc xmlDoc = new OpenXmlDoc(); XmlDocWrite wrtObj = new XmlDocWrite(); if (!xmlDoc.gblOpenFile(strFile)) System.exit(1); Document document = xmlDoc.gdocGetDocument(); System.out.println("\nXML文書 " + strFile + " ルート要素は " + document.getDocumentElement().getNodeName() + " です。\n"); wrtObj.gvdXmlDocWrite(document); } } エラーの原因は以下のソースファイルみたいのですが、 package uCommon ; import java.io.* ; import org.w3c.dom.Document ; import javax.xml.parsers.* ; import org.apache.crimson.tree.* ; public class OpenXmlDoc { private Document document ; public boolean gblOpenFile(String strFileName) { try { DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance() ; DocumentBuilder docBld = docFact.newDocumentBuilder() ; document = docBld.parse(new File(strFileName)) ; document.getDocumentElement().normalize() ; } catch(Exception except) { except.printStackTrace(); return false ; } return true ; } public Document gdocGetDocument() { return document ; } } 原因が分かる方がいましたら、教えて頂きたいのですが。

  • Element→Document→InputStream

    お世話になります。 バイト配列 buf をもとに、XMLエレメントを作成しています。 ↓↓↓ DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbfactory.newDocumentBuilder(); Document document = builder.parse( new ByteArrayInputStream( buf ) ); Element element = document.getDocumentElement(); 上記、element から バイト配列buf に戻すことは可能でしょうか? (イメージ的に、element.getBytes() のような事をしたいです。) よろしくお願い致します。

    • ベストアンサー
    • Java
  • XMLファイルの読込み方法についての質問

    こんにちは、mako-kwnshと申します。 あるXMLを読み込んで指定したノード内 のデータを取り込んだ後、 指定したノードをnode型のデータに 代入したいのですが、 やり方がいまいちわかりません。 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse("c:\\Scenario\\test1.xml"); Element xmlroot = doc.getDocumentElement(); //String first = xmlroot.getNodeName(); // EMSData d3aData = new EMSData(att); // System.out.println("ddd" + d3aData.getValue(D3aCommonInfoPath.SYSTEM_KIND)); // System.out.println("ddd" + xmlroot);

    • ベストアンサー
    • 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
  • XML ファイル parse 時の例外発生

    XML ファイル parse 時の例外発生 Java プログラムにて UTF-8 で書いた XML ファイルを DOM オブジェクトに読み込むときに、CJK Unified Ideograph Extension B などの (UTF-16 にて surrogate pair となるような) 字をコメント内に書くと、例外が発生します。何かよい回避方法は無いでしょうか。 例外は: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xd85a) was found in the comment. XML ファイルは encoding="UTF-8" としており、コメント以外のテキストにこれを書く分には、特に問題無く parse できています。 読み取りは DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); factory.setIgnoringComments(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("hoge.xml"); などとしています。JDK のバージョンは 1.6.0_17-b04 on Windows Vista。 当該文字を "" で囲んだり、通るタグ記述の形のままコメント化したりもしましたが、だめでした。 以上、よろしくお願いいたします。

専門家に質問してみよう