質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

受付中

isEndElementで要素名が必要とエラー</>を受け付けない

beginJavaPlayer
beginJavaPlayer

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0リアクション

0クリップ

184閲覧

投稿2022/10/03 12:45

編集2022/10/04 02:58

質問:xml文書を読み取る際に</>を読み取れる様にしたい
(※</〇〇〇>ではなく、</>です)
事象:XMLStreamExceptionでexpected an element name
使用言語:Java
環境:Axis2,SOAP,tomcat,jdk1.8,spring,Eclipse

現在、ドキュメントリテラル型の通信を実装しております

基本的に下記の様にどんどんXMLのデータタグと比較してreader.next()で読み進めていく感じです。
if(reader.isStartElement()
&& new QName("http://〇〇〇〇〇","Test4").getLocalPart()
.equals(reader.getName().toString()))

しかし、恐らくisEndElement自体が</>を受け付けていない様に思われます。
打開策が思い浮かばず…

------【追記】------
どうやら </ までは認識していて、
その次に > がくるとexceptionをはいている様です。
つまり、要素無しだからですね。

実現したい事は、
終了タグ</>で通信する事です

以下、使用リソース

xml

<SampleData> <DataOpe> <Test1>TestRequest</> <Test2> <Test3>TestBody1</> <Test4>TestBody2</> </Test2> </DataOpe> </SampleData>

抜粋してもかなりコードが多くなってしまうので結構割愛しております

Java

public static Test2 pase(XMLStreanReader reader){ Test2 obj = new Test2(); QName qname = null; String prefix = ""; String namspaceuri = ""; while(!reader.isStartElement() && !reader.isEndElement()) reader.net(); qname = reader.getName(); if(reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", "type") != null){ String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", "type") ; if(fullTypeName != null){ String nsPrefix = null; if(fullTypeName.indexOf(":") > -1){ nsPrefix = fullTypeName.substring(0, fullTypeName.indexOf(":")); } nsPrefix = nsPrefix == null ? "" : nsPrefix ; String type = fullTypeName.substring(fullTypeName.indexOf(":")+1) if(!"Test2".equals(Type)){ …割愛 }   reader.next(); while(!reader.isStartElement() && !reader.isEndElement()) reader.net(); if(reader.isStartElement() && new QName("http://〇〇〇〇〇","Test4").getLocalPart() .equals(reader.getName().toString())){ …割愛 reader.next(); } while(!reader.isStartElement() && !reader.isEndElement()) reader.net(); if(reader.isStartElement() && new QName("http://〇〇〇〇〇","Test3").getLocalPart() .equals(reader.getName().toString())){ …割愛 reader.next(); } while(!reader.isStartElement() && !reader.isEndElement()) reader.net(); } } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jimbe

2022/10/03 14:57

</> って何でしょう。 XML では終了タグは </〇〇〇> だけだと思いますが。
beginJavaPlayer

2022/10/04 01:31

いえ、記述している通り、使う終了タグは</>です。 それで何とか実装しなければなりません。
jimbe

2022/10/04 03:53

実装しなけらばと言ってもそれは使う側の勝手な要望で、XML で無いモノを XML のパーサで扱おうというのは、パーサ側からすれば想定する訳は無いと思います。 XMLStreanReader に終了タグを省略した形を有効にする設定でもあれば簡単ですが、無ければ、 XML 処理の前に文字列編集として終了タグを XML に沿うように書き換えるとか、 有るか知りませんが SGML のパーサを探すとかが必要で、現状 pase メソッド (parse ?) だけでどうにかしようというのは無理でしょう。
beginJavaPlayer

2022/10/05 05:52

ありがとうございます。 自分の実現したい事を記載しております。 私1人では方法が思い浮かばないので「具体的な方法」を教えて頂ければ嬉しいです。
beginJavaPlayer

2022/10/05 05:53

なので、特に、 parseメソッドだけでどうにかしたい、 とは実現したい事に記載してはいないです。
jimbe

2022/10/05 16:39 編集

とにかく xml (と言われている xml ではない)ファイルを読むとして、どのような結果が出せればとお考えでしょうか。 例えば、実行すると /SampleData/DataOpe/Test1:TestRequest /SampleData/DataOpe/Test2/Test3:TestBody1 /SampleData/DataOpe/Test2/Test4:TestBody2 と表示されるようなサンプルが出来れば OK とか。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。