0

いくつかの例を見てきましたが、それらはすべて、私が読み込もうとしているものよりも単純なXMLファイルを使用しているようです。

これが私が読み込もうとしているレイアウトの例です:

<map>
    <map_values></map_values>

    <grid>
        <grid_values></grid_values>

        <square>
            <values></values>
        </square>

        <square>
            <values></values>
        </square>

        <square>
            <values></values>
        </square>
    </grid>

    <grid>
        <grid_values></grid_values>

        <square>
            <values></values>
        </square>

        <square>
            <values></values>
        </square>

        <square>
            <values></values>
        </square>
    </grid>
</map>

現在、DOMを使用してこれを読み取ろうとしていますが、一度に1つのグリッドの正方形のセクションを読み取る方法がわかりません。現在、私は以下を使用しています:

NodeList squares = doc.getElementsByTagName("square");

しかし、それは両方のグリッドのすべての正方形を返しています。

DOMから切り替えても大丈夫です。何に切り替えるか、どこに良いチュートリアルを見つけるかについての提案が必要です。

4

5 に答える 5

2

これにはJAXBを使用できます。これらのマップのモデルオブジェクトを作成するのは非常に簡単です。

このライブラリの使用方法については、たとえば http://www.mkyong.com/java/jaxb-hello-world-example/を参照してください。

于 2012-12-01T23:39:05.027 に答える
2

JAXB(Java Architecture for XML Binding)を使用することをお勧めします。これは、使いやすく、XSDに対して検証するためにも使用できるためです(必要な場合)。

Java Beans <----> XML

これがあなたにそれの感触を与えるためのサンプルです:

出典:JAXB Tutorail Basic

@XmlRootElement(name = "book")
// If you want you can define the order in which the fields are written
// Optional
@XmlType(propOrder = { "author", "name", "publisher", "isbn" })
public class Book {

  private String name;
  private String author;
  private String publisher;
  private String isbn;

  // If you like the variable name, e.g. "name", you can easily change this
  // name for your XML-Output:
  @XmlElement(name = "title")
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }

  public String getPublisher() {
    return publisher;
  }

  public void setPublisher(String publisher) {
    this.publisher = publisher;
  }

  public String getIsbn() {
    return isbn;
  }

  public void setIsbn(String isbn) {
    this.isbn = isbn;
  }

}
于 2012-12-02T09:24:35.750 に答える
1

あなたはこのようなことをするのはどうですか:

NodeList grids = doc.getElementsByTagName("grid");

そして、繰り返してgrids、それぞれについて、getElementsByTagName("square")?を呼び出します。

それはあなたの問題を解決するでしょう:

NodeList grids = doc.getElementsByTagName("grid");
for (int i=0; i < grids.getLength(); ++i) {
    Element grid = (Element) grids.item(i);
    NodeList squares = grid.getElementsByTagName("square");
    ...
}
于 2012-12-01T23:37:29.277 に答える
1

1)私の個人的な好みはDOMです。SAXは通常私の2番目の選択肢です(パフォーマンスが問題になる場合)。

2)JavaとXMLには、次のような多くの(多くの、多くの!)優れたチュートリアルがあります。

3)JavaとXPathを使用して、探しているノードを取得する方法についての良い議論があります。

于 2012-12-01T23:46:58.760 に答える
0

最初にグリッドを次のように検索することをお勧めします。

  NodeList grids = doc.getElementsByTagName("grid");

次に、最初のノードsquareの最初のgridノードを取得するには、次のことを試してください。

  Node gridNode = grids.item(0);
  Node squareNode = gridNode.getChildNodes().item(2); //as it is second child node

* _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____

ただし、オブジェクトに変換するための非常に単純なAPIを備えたXStreamなどのXMLフレームワークを使用する場合はより適切です。これを使用して、JAVAで両方のXMLファイルを変換し、JAVA比較を使用することができます。XMLJAVA

簡単な手順は次のとおりです。

  1. 単純なJavaオブジェクト(POJO)を定義します。たとえばMyXMLObj、Java属性にXML属性をマップします。
  2. JavaでXMLを次のように変換します。

    XStream xstream = new XStream();
    //or
    XStream xstream = new XStream(new DomDriver());
    //or
    //XStream xstream = new XStream(new StaxDriver());
    
     MyXMLObj myXMLObj= (MyXMLObj)xstream.fromXML(xml1);
    
  3. Javaオブジェクトをトラバースして、目的の属性値を次のように取得するだけです。

    myXMLObj.getGrids().get(0).getSquare();//returns square from first gird node
    
于 2012-12-02T00:01:26.567 に答える