1

xml ファイルの値を取得しようとしています。

<p1>
    <cts>Pq44</cts>
    <cts>qw44</cts>
</p1>

P1.JAVA

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class P1 {
    private List<Cts> cts;

     public P1() {
         cts = new ArrayList<cts>();
     }  
     public List<cts> getcts() {
        return cts;
     }
     public void setcts(List<cts> cts) {
        this.cts = cts;
     }
}

CTS.JAVA

public class CTS {

    private String ct;

    // Getter and setter for ct.

}

じぶんのMain.java

try {            
    File file = new File("D:\\Bye.xml");
    JAXBContext jaxbContext = JAXBContext.newInstance(P1.class);

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    P1 p = (P1) jaxbUnmarshaller.unmarshal(file);

    List<CTS> cts =  p.getCTS();
    // Size of list coming right `2`
    for (CTS c : cts) {
          System.out.println(CTS2.getCT());
    }
} catch (JAXBException e) {
    e.printStackTrace();
}

main.java を実行すると、次のように出力されます。

null
null
4

3 に答える 3

1

あなたのループは次のようになるはずです

for (CTS c : cts) {
    System.out.println(c.getCt());
}
于 2012-12-21T11:59:11.757 に答える
1

@XmlValue以下を使用して実行できます。

CTS

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class CTS {

    @XmlValue
    private String ct;

    public String getCt() {
        return ct;
    }

    public void setCt(String ct) {
        this.ct = ct;
    }

}

P1

import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class P1 {

    private List<CTS> cts;

    public P1() {
        cts = new ArrayList<CTS>();
    }

    public List<CTS> getCts() {
        return cts;
    }

    public void setCts(List<CTS> cts) {
        this.cts = cts;
    }

}

p1.xml

<p1>
    <cts>Pq44</cts>
    <cts>qw44</cts>
</p1>

アプリ

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args ) throws JAXBException
    {
        System.out.println( "Hello World!" );
        String filePath = ".\\p1.xml";

        File file = new File(filePath);
        JAXBContext jaxbContext = JAXBContext.newInstance(P1.class);

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        P1 p = (P1) jaxbUnmarshaller.unmarshal(file);

        List<CTS> cts =  p.getCts();
        // Size of list coming right `2`
        for (CTS c : cts) {
              System.out.println(c.getCt());
        }
    }
}

出力

Hello World!
Pq44
qw44
于 2012-12-21T12:06:16.527 に答える
-2

私はいくつかの回避策を実行しました。ベースの XML ファイルで動作するコードを投稿しています。

p1.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p1>
    <cts>Pq44</cts>
    <cts>qw44</cts>
</p1>

P1.java

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "p1")
public class P1 {

    private ArrayList<String> cts;
    public ArrayList<String> getCts() {
        return cts;
    }
    public void setCts(ArrayList<String> cts) {
        this.cts = cts;
    }
}

TestApp.java

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args ) throws JAXBException
    {
        System.out.println( "Hello World!" );
        String filePath = ".\\p1.xml";

        File file = new File(filePath);
        JAXBContext jaxbContext = JAXBContext.newInstance(P1.class);

        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        P1 p = (P1) jaxbUnmarshaller.unmarshal(file);

        List<String> cts =  p.getCts();
        // Size of list coming right `2`
        for (String c : cts) {
              System.out.println(c);
        }
    }
}

この方法を試してみるとうまくいきます。

出力

Hello World!
Pq44
qw44
于 2012-12-21T13:25:26.483 に答える