在Java应用程序中读取XML文档

时间:2018-06-26 08:58:47

标签: java xml jaxb

我一直在做很多解决方案,但是没有人起作用。我如何在Java中打印此XML代码。主要问题是如何打印xml:lang值。

<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-properties.xsd">
<property key="hour.plural">
    <value xml:lang="ar">ساعات</value>
    <value xml:lang="de">Stunden</value>

<value xml:lang="pl">oglądaj</value></property></resource>

这是资源类

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="resource")
public class resource {

    private String property;
    private String value;

    public root(String property, String value) {
        this.property = property;
        this.value = value;
    }

    public String getProperty() {
        return property;
    }

    public String getValue() {
        return value;
    }
    public String toString() {
        return property + value;
    }
}

那是主要的类

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import project1.resource;
    public class xmlread {

        public static void main(String... arg) throws Exception {
            File file = new File("C:DateTimeLabels.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(resource.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            resource Resource = (resource) jaxbUnmarshaller.unmarshal(file);
            System.out.println(Resource);
    }
}

2 个答案:

答案 0 :(得分:0)

@XmlRootElement(name="resource")
public class resource {

    private String property;
    private String value;

    public root(String property, String value) {
        this.property = property;
        this.value = value;
    }
    @XmlElement(name = "property")
    public String getProperty() {
        return property;
    }
    @XmlElement(name = "value")
    public String getValue() {
        return value;
    }
    public String toString() {
        return property + value;
    }
}`

将其添加到您的资源类中,应该可以帮助编组找到所需的确切属性。

答案 1 :(得分:0)

您拥有多个值,因此,为了<value>元素,您需要定义一个值列表。

元素包含在元素内部,因此您在此处具有嵌套结构。这意味着您需要在Resource类中包含一个Property类,并且Property类需要包含一个Value类。

您需要绑定key属性和xml:lang属性。

这里是一个带有Jaxb注释的类的示例,该类完成了大部分工作以映射到您的XML格式。根据需要完成。

@XmlRootElement
public class Resource {
  private Property property = new Property();

  public Property getProperty() {
    return property;
  }

  public void setProperty(Property property) {
    this.property = property;
  }

  public static void main(String[] args) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(Resource.class);
    Marshaller marshaller = context.createMarshaller();

    Resource resource = new Resource();
    resource.getProperty().setKey("hour.plural");
    resource.getProperty().getValues().add(new Value("fr"));
    resource.getProperty().getValues().add(new Value("it"));
    resource.getProperty().getValues().add(new Value("ru"));

    marshaller.marshal(resource, System.out);
  }

}

class Property {
  private String key;

  private List<Value> values = new ArrayList<>();

  @XmlAttribute
  public String getKey() {
    return key;
  }

  public void setKey(String key) {
    this.key = key;
  }

  @XmlElement(name = "value")
  public List<Value> getValues() {
    return values;
  }

  public void setValues(List<Value> values) {
    this.values = values;
  }

}

class Value {
  private String lang;

  public Value() {

  }

  public Value(String lang) {
    this.lang = lang;
  }

  @XmlAttribute
  public String getLang() {
    return lang;
  }

  public void setLang(String lang) {
    this.lang = lang;
  }

}