Java JAXB中的对象
我有一个XML,如下所示Java JAXB中的对象,java,xml,jaxb,Java,Xml,Jaxb,我有一个XML,如下所示 <rootElement> <element1>data</element1> <element2 attribute1="value1" attribute2="value2"> <inner_element>2</inner_element> </element2> </rootElement> 我想允许用户在中输入任何类
<rootElement>
<element1>data</element1>
<element2 attribute1="value1" attribute2="value2">
<inner_element>2</inner_element>
</element2>
</rootElement>
我想允许用户在
中输入任何类型的值(字符串、整数、双精度)
在Java中,我能够读取其他元素
&
,但是,我得到的值为null
。知道怎么做吗?在InnerElement类上尝试@XmlValue而不是@XmlAnyElement。
还可以使用此XSD解析为字符串而不是对象
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rootElement">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="element1"/>
<xs:element name="element2">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:anyType" name="inner_element"/>
</xs:sequence>
<xs:attribute type="xs:string" name="attribute1"/>
<xs:attribute type="xs:string" name="attribute2"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这个ObjectFactory类
package com.test.jaxb;
import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {
public ObjectFactory() {
}
public RootElement createRootElement() {
return new RootElement();
}
public RootElement.Element2 createRootElementElement2() {
return new RootElement.Element2();
}
}
不起作用,我已经把一个字段@XmlValue对象值;在内部元素类中。(获取错误)但是,每当我放置Integer/Double/String时,只要数据输入正确,它就会工作。该元素中允许哪些值?听起来您需要将其解析为一个字符串以容纳任何值,然后手动将其解析为一个数字(如果是oneI),我希望允许Integer、String、Double等类型的值。。将使用字符串实现它,然后将其转换回适当的类型。我想string会处理xml中的所有类型。您能生成xml的XSD shema吗
package com.test.jaxb;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"element1",
"element2"
})
@XmlRootElement(name = "rootElement")
public class RootElement {
@XmlElement(required = true)
protected String element1;
@XmlElement(required = true)
protected RootElement.Element2 element2;
public String getElement1() {
return element1;
}
public void setElement1(String value) {
this.element1 = value;
}
public RootElement.Element2 getElement2() {
return element2;
}
public void setElement2(RootElement.Element2 value) {
this.element2 = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"innerElement"
})
public static class Element2 {
@XmlElement(name = "inner_element", required = true)
protected Object innerElement;
@XmlAttribute(name = "attribute1")
protected String attribute1;
@XmlAttribute(name = "attribute2")
protected String attribute2;
public Object getInnerElement() {
return innerElement;
}
public void setInnerElement(Object value) {
this.innerElement = value;
}
public String getAttribute1() {
return attribute1;
}
public void setAttribute1(String value) {
this.attribute1 = value;
}
public String getAttribute2() {
return attribute2;
}
public void setAttribute2(String value) {
this.attribute2 = value;
}
}
}
package com.test.jaxb;
import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {
public ObjectFactory() {
}
public RootElement createRootElement() {
return new RootElement();
}
public RootElement.Element2 createRootElementElement2() {
return new RootElement.Element2();
}
}