2012-12-21 101 views
1

我想获得xml文件的值。如何获取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 

回答

-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 
+1

你不需要做你的解决方法。通过利用'@ XmlValue'注释,您可以使用您的问题中的对象模型:http://stackoverflow.com/a/13989888/383861 –

1

我觉得你的循环应该像

for (CTS c : cts) { 
    System.out.println(c.getCt()); 
} 
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