匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 10 年前

關於xml和java連結

<test>

<question>

<number>1</number>

<content>Do you know how to play the ____________.</content>

<A>tennis</A>

<B>piano</B>

<C>computer</C>

<D>cards</D>

<answer>B</answer>

<level>1</level>

</question>

<question>

<number>2</number>

<content>Do you know how to play the ____________.</content>

<A>tennis</A>

<B>piano</B>

<C>computer</C>

<D>cards</D>

<answer>D</answer>

<level>5</level>

</question>

</test>

以上是我的xml檔案(檔名:123.xml)

請問各位大大,該如何寫出一個java程式,可以讓我搜尋xml中的題目

(例如:設定題目的level以及number(題號),然後自然而然就會跑出xml文件中所對應的那一題題目+四個選項+答案)

已更新項目:

Dear Yen:

恩!!!參考後有做出來了!!!!!!!!!感恩!!!!!!!!!!!

可是請問一下要怎麼讀到xml檔就好,不要讓他全部顯示出來??

因為我是要讓user輸入level後再輸入number(題號),然後會跑出相對應的題目以及選項以及答案.

感謝!!!!!!!!!!!!!!!!!!!!!!!!!!!

2 個已更新項目:

我是參考你的DOM

1 個解答

評分
  • ?
    Lv 4
    10 年前
    最佳解答

    Java的XML Parser不只一種,看你想用哪一種Parser吧。

    我個人挺推JDOM。

    可以參考這篇文章:

    http://blog.xuite.net/javax/programmer/22438335

    2010-12-06 00:28:17 補充:

    一般來說是把根據XML的內容,訂出一個相對應的class。

    例如:

    class Question{

    int number;

    String content;

    String[] options;

    char answer;

    int level;

    }

    接著再讀取XML,依據讀到的內容,做出Object後存起來。

    你用DOM的話,會變得很繁瑣。

    程式碼在這裡,你可以看看:

    https://docs.google.com/document/d/1yhDwWeNHS-GE-_...

    用JDOM會簡潔很多,去下載來解壓縮,設置好classpath就可以用了:

    public class Main {

    public static void main(String[] args) throws JDOMException, IOException {

    SAXBuilder builder = new SAXBuilder();

    Document doc = builder.build(new File("test.xml"));

    Element test = doc.getRootElement();

    List questionElements = test.getChildren("question");

    List questionList = new ArrayList (questionElements.size());

    for(Element e : questionElements){

    Question q = new Question();

    String[] options = new String[4];

    q.number = Integer.parseInt(e.getChildText("number"));

    q.content = (e.getChildText("content"));

    q.level = Integer.parseInt(e.getChildText("level"));

    q.answer = e.getChildText("answer").charAt(0);

    options[0] = (e.getChildText("A"));

    options[1] = (e.getChildText("B"));

    options[2] = (e.getChildText("C"));

    options[3] = (e.getChildText("D"));

    q.options = options;

    questionList.add(q);

    }

    int level, number;

    java.util.Scanner input = new java.util.Scanner(System.in);

    System.out.print("Please input the test level:");

    level = input.nextInt();

    System.out.print("Please input the test number:");

    number = input.nextInt();

    for(Question q : questionList){

    if( q.level == level && q.number == number){

    System.out.printf("Question No.%d: %s %n",q.number, q.content);

    for(int j = 0; j < q.options.length; j++){

    System.out.printf("%c:%s%n",j+65,q.options[j]); //+65是為了把數字轉換成ASCII的英文字

    }

    System.out.printf("Answer:%c%n", q.answer);

    }

    }

    }

    }

    此外,也可以考慮使用一些XML to Java 的Mapping 工具,如Castor。

    2010-12-06 02:44:02 補充:

    import 不見了。

    補上:

    import java.io.*;

    import java.util.*;

    import org.jdom.Document;

    import org.jdom.Element;

    import org.jdom.JDOMException;

    import org.jdom.input.SAXBuilder;

還有問題?馬上發問,尋求解答。