- PR -

【質問】XMLパースについて。

投稿者投稿内容
るしぃ。
常連さん
会議室デビュー日: 2004/09/16
投稿数: 21
投稿日時: 2004-09-24 20:54
XMLデータをパースしたいのですが、

"<!-- コメント -->"

のような行が含まれる場合、

"org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed."

という例外が返ってきます。

何か考えられる原因がありましたら宜しくお願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-24 21:52
・パーサは何を使っていますか?
・XMLのエンコーディング指定とコメントの文字コードは合っていますか?
るしぃ。
常連さん
会議室デビュー日: 2004/09/16
投稿数: 21
投稿日時: 2004-09-25 12:03
引用:

ukさんの書き込み (2004-09-24 21:52) より:
・パーサは何を使っていますか?
・XMLのエンコーディング指定とコメントの文字コードは合っていますか?




ukさん、ご返信どうもありがとうございましたっ♪
DOMParserを使っております。

ちょっとわかったことがありまして、あっているかどうかわかりませんが・・・。
<!- コメント -> の記述の前に、
<ReportInfo SEC="1">とあるのですが、これを対になっているタグ(<a></a>)と
認識してしまい、次の行の<!- コメント ->を値として読み取ったため、
起こったエラーなのではないかと考えました。
おそらく、Node.ELEMENT_NODEを条件に加え読み取らないようにすることで回避できる
と思います。

[ メッセージ編集済み 編集者: るしぃ。 編集日時 2004-09-25 12:04 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-25 12:22
引用:

るしぃ。さんの書き込み (2004-09-25 12:03) より:
DOMParserを使っております。


DOMParserということはxercesを使っているということですか? バージョンはなんですか?

引用:

ちょっとわかったことがありまして、あっているかどうかわかりませんが・・・。
<!- コメント -> の記述の前に、
<ReportInfo SEC="1">とあるのですが、これを対になっているタグ(<a></a>)と
認識してしまい、次の行の<!- コメント ->を値として読み取ったため、
起こったエラーなのではないかと考えました。
おそらく、Node.ELEMENT_NODEを条件に加え読み取らないようにすることで回避できる
と思います。


すいません、まったく意味がわからないんですが。「Node.ELEMENT_NODEを条件に加える」
って何に加えるんですか? あと、エンコーディングの確認はされました? それから本質的な
ことを聞くのを忘れましたが、そのコメント行を取ればパースできるんですよね?
るしぃ。
常連さん
会議室デビュー日: 2004/09/16
投稿数: 21
投稿日時: 2004-09-25 14:16
ukさん、またまた、ご返信ありがとうございます。
私、JAVA初心者なため、うまく伝えられませんで申し訳ないです・・・。

xerces.jar使ってます。バージョンってJAVA1.3って表現であってますよね?
XMLの文字コードは、Shift_JISです。

<ReportInfo SEC="1">
<!- コメント ->
<a>あいうえお</a> 
<ReportInfo SEC="2">
<!- コメント ->
<a>かきくけこ</a>
    .

    ・ 

上記のように並んでいまして、"あいうえお"を取得しようとしています。
それで、<ReportInfo SEC="1">が対になっていると判断して、
次の行の"コメント"を取得してしまっているようなので、
Node.ELEMENT_NODEの時は、値を取得しないという風に、
したらいいのではないかなー♪って思ったんです。
サイトにもいろいろ書いているようなので、ちょっといろいろやってみます。
聞いてばかりだと成長しませんしねっ。
また行き詰まりましたら、ご相談しますねっ!
ありがとうございました。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-09-25 15:48
typoなのか判断が付きかねますが
引用:

<ReportInfo SEC="1">
<!- コメント ->
<a>あいうえお</a> 
<ReportInfo SEC="2">
<!- コメント ->
<a>かきくけこ</a>
    .

    ・ 


XMLのコメントは<!-- から -->までなので、
->で終わるとwell-formedな(整形式である)XML文書になりません。
それから、ReportInfoの終了タグが無いように見えます。
もっとも、一部のみ引用しただけで実際にはあるのかもしれませんが。

パーサの吐いたエラーメッセージ
「The markup in the document preceding the root element must be well-formed」
は、あなたのXML文書がwell-formedでないことを示しています。
XMLの整形式についてはこちらが参考になると思います。
http://www.atmarkit.co.jp/fxml/rensai2/xmlmaster04/master04.html
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-25 19:39
まずエラーの原因ですが、ReportInfoが「対になっていない」つまり終了タグがないからでは?

<ReportInfo SEC="1">
<!-- コメント -->
<a>あいうえお</a> 
</ReportInfo>
<ReportInfo SEC="2">
<!-- コメント -->
<a>かきくけこ</a>
</ReportInfo>

のようになっていなければならないはずですが。
#コメントの記述は私もtypoだろう、と思うのですが。

前にも書きましたが、そもそも「コメントがなければパースできる」のですか?
るしぃ。
常連さん
会議室デビュー日: 2004/09/16
投稿数: 21
投稿日時: 2004-09-27 09:09
koeさん、ukさん、ご返信ありがとうございます。

すいません、<- ->は、書き込みする際のタイムミスです。
コメント部分は、<-- -->となっています。
<ReportInfo SEC="1">も対になっておりました。。。
コメントないとパースできております。
コメントある場合も値を取得できておりますので、パースはできていると思います。
パースした値を操作する時にエラーがでていましたので、
操作部分を修正していろいろやってみたいとおもいます。

ありがとうございましたっ!

スキルアップ/キャリアアップ(JOB@IT)