0

次のような単純な XML ファイルが与えられた場合:

<Game>
    <Round>
        <roundNumber>1</roundNumber>
        <Door>
            <doorName>abd11</doorName>
            <Value>
                <xVal1>0</xVal1>
                <xVal2>25</xVal2>
                <pVal>0.31</pVal>
            </Value>
            <Value>
                <xVal1>25</xVal1>
                <xVal2>50</xVal2>
                <pVal>0.04</pVal>
            </Value>
            <Value>
                <xVal1>50</xVal1>
                <xVal2>75</xVal2>
                <pVal>0.19</pVal>
            </Value>
            <Value>
                <xVal1>75</xVal1>
                <xVal2>100</xVal2>
                <pVal>0.46</pVal>
            </Value>
        </Door>
        <Door>
            <doorName>vvv1133</doorName>
            <Value>
                <xVal1>60</xVal1>
                <xVal2>62</xVal2>
                <pVal>1.0</pVal>
            </Value>
        </Door>
    </Round>
    <Round>
        <roundNumber>2</roundNumber>
        <Door>
            <doorName>eee</doorName>
            <Value>
                <xVal1>0</xVal1>
                <xVal2>-25</xVal2>
                <pVal>0.31</pVal>
            </Value>
            <Value>
                <xVal1>-25</xVal1>
                <xVal2>-50</xVal2>
                <pVal>0.04</pVal>
            </Value>
            <Value>
                <xVal1>-50</xVal1>
                <xVal2>-75</xVal2>
                <pVal>0.19</pVal>
            </Value>
            <Value>
                <xVal1>-75</xVal1>
                <xVal2>-100</xVal2>
                <pVal>0.46</pVal>
            </Value>
        </Door>
        <Door>
            <doorName>cc</doorName>
            <Value>
                <xVal1>-60</xVal1>
                <xVal2>-62</xVal2>
                <pVal>0.3</pVal>
            </Value>
            <Value>
                <xVal1>-70</xVal1>
                <xVal2>-78</xVal2>
                <pVal>0.7</pVal>
            </Value>
        </Door>
    </Round>
</Game>

そのファイルからデータを読み取りたい。

タグを読み取る昔ながらの方法でそれを行うことができ、それに応じてオブジェクトを作成できます。

しかし、リフレクションメカニズムを使用してやりたいです。

誰かがそれを行う方法を説明できるチュートリアルを説明または案内してもらえますか?

ありがとう

編集:

私は次のことをしました:

import java.io.File;
import org.w3c.dom.Document;
import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException; 

public class ReadAndPrintXMLFile {


    public static void main (String argv []){
    try {

            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse (new File("input.xml"));


            // ROOT 

            // normalize text representation
            doc.getDocumentElement ().normalize ();
            System.out.println ("Root element of the doc is " + 
                 doc.getDocumentElement().getNodeName());


            // Number of nodes/rounds 


            NodeList listOfItems = doc.getElementsByTagName("Round");
            int totalElements = listOfItems.getLength();
            System.out.println("Total number of nodes : " + totalElements );
...
...
}

これは部分的なコードです。私はコードを実行してテストしました。現時点では、SAX を使用して、上記の XML ファイルから読み取ることができます。

ここでやりたいことは、リフレクションを使用してデータを操作することです。私の理解では、リフレクションは既存のオブジェクトでのみ機能します。したがって、変数にデータ(つまりラウンド)を格納し、listOfItemsその上でリフレクションを使用するだけで十分ですか?

再度、感謝します !

4

3 に答える 3

4

その場合、paulsm4が提案したようにJava XML apiを使用してXMLファイルをJavaに読み込み、リフレクションを使用してそれらを取得して操作できると思います。

http://java.sun.com/developer/technicalArticles/ALT/Reflection/

これは死んでいるので、これを試してください。http://docs.oracle.com/javase/tutorial/reflect/index.html

これは最良のチュートリアルではありませんが、必要なものには十分なはずです。そして、これはリフレクションAPIの非常に貧弱な使用法であると示唆するかもしれません。したがって、宿題を与えた人に卵を投げたいと思います:-D

編集:はい、必要に応じてリフレクションを使用できます。または、オブジェクトモデル(ドア、ラウンド、ゲームのクラス)を作成し、XMLファイルに値を入力して、必要なものにリフレクションを使用することもできます。終わり。あなたがそれをどのようにやりたいかを決めるのはあなた次第です!

于 2012-05-04T06:27:45.433 に答える
3

Java XML API の 1 つを使用する「昔ながらの方法」と読んでみませんか?????

「Java XML」、「SAX」、「DOM」、「DocumentBuilder」、「org.w3c.dom」などを Google で検索すると、優れたドキュメントやチュートリアルがたくさん見つかります。例えば:

于 2012-05-04T06:14:17.183 に答える
2

次のようなものがあります。

GameRound >>
  int roundNumber
  Door door >>
    String doorName
    Value value >>
      int xVal1
      int xVal2
      float pVal

そして、xml を解析してオブジェクトにデータを追加したいとお考えですか? これは正しいです?

もしそうなら、私は要点がわかりません!API を使用したくない場合でも、独自の API を作成し、セッターを介して値を入力してください。

卵の@Thihara +1 xD

于 2012-05-04T06:37:43.100 に答える