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

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

ただいまの
回答率

87.49%

xmlファイルを読み込んで、条件をつけて出力する

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,252

score 12

前提・実現したいこと

Java初心者で、学習の為にxmlファイルを読み込んで、条件をつけて出力する課題に取り組んでいるのですが、下記の条件の内「item要素にOKとokの両方有れば「だぶる」と出力する」がうまく組み込めません。
よろしくお願い致します。

XML
<?xml version="1.0" encoding="UTF-8"?>
<property>
<item>ok</item>
</property>
条件
item要素にokが有れば「おっけー」と出力する
item要素にOKが有れば「オッケー」と出力する
item要素にOKとokの両方有れば「だぶる」と出力する
item要素にokかOKが無ければ「無し」と出力する

package reader;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XmlReader {

    public void domRead(String file) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new File("property.xml"));

            Element element = doc.getDocumentElement();

            NodeList nodeList = element.getChildNodes();
            for(int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                if(node.getNodeType() == Node.ELEMENT_NODE) {
                    Element name = (Element)node;
                    if(name.getNodeName().equals("item")) {
                        if(name.getTextContent().equals("ok")) {
                            System.out.println("おっけー");
                        }

                        if(name.getTextContent().equals("OK")) {
                            System.out.println("オッケー");
                        }

                        if(!(name.getTextContent().equals("ok"))&&(!(name.getTextContent().equals("OK")))){
                            System.out.println("なし");
                        }




                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package action;

import reader.XmlReader;

public class Main {
    public static void main(String[] args) throws Exception {
        XmlReader reader = new XmlReader();
        reader.domRead("property.xml");
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • jimbe

    2019/09/16 22:09

    「うまく組み込めません」とは, 具体的にどういう状況でしょう.
    コードが思いつかないのか, 思いついたコードを入れてみたが想定した動作をしなかったのか...
    「だぶる」以外は動作していますか.

    キャンセル

  • a.a

    2019/09/17 07:48

    ありがとうございます。
    コードが思いつきません。
    例えば、
    <property>
    <item>okOK</item>
    </property>
    に対して
    だぶる、と出力するなら今までの学習からわかるのですが、
    <property>
    <item>ok</item>
    <item>OK</item>
    </property>
    という場合に、だぶる
    と出力する為に、item要素の内容を全てforで確認した上で、どちらもあれば、trueとなるif文を組むのだと思うのですが、その方法が調べてもわかりません。
    よろしくお願いします。

    キャンセル

回答 1

checkベストアンサー

0

for 文'内'の「 item 要素の内容をチェックする部分」と, for 文'外'の「チェックした状態から表示する部分」に分けてお考えになっては如何でしょう.

for 文'内'「 item 要素の内容をチェックする部分」

"ok"/"OK" があった場合に true となる変数を用意し初期値を false とする.

boolean hasLowercase = false;
boolean hasUppercase = false;

for 文'内'で "ok"/"OK" の有無で 各変数の値を変える.

if( /*"ok" だったら*/ ) { hasLowercase = true; }
if( /*"OK" だったら*/ ) { hasUppercase = true; }

for 文'外'「チェックした状態から表示する部分」

変数の状態から各メッセージを表示する.

if(hasLowercase == true && hasUppercase == true) {
  /*"だぶる"を表示*/
} else if(hasLowercase == true) {
  /*"おっけー"を表示*/
//以下略

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/18 06:57

    教えて頂くとなるほど、と思いました。
    大変参考になります。
    いつもありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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