Jaxb - 如何避免 "xsi:" 在根元素
Jaxb - How to avoid "xsi:" at root element
我正在使用 Java 7 并尝试使用 jaxb 从 xsd 创建一个 xml。
我从 xsd.
生成了 Java classes
class1:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"vnr",
"meldungsart",
"teilnehmeranzahl",
"email",
"teilnehmer"
})
@XmlRootElement(name = "Veranstaltung")
public class Veranstaltung {
@XmlElement(name = "VNR", required = true)
protected String vnr;
@XmlElement(name = "Meldungsart", required = true)
protected String meldungsart;
@XmlElement(name = "Teilnehmeranzahl")
protected int teilnehmeranzahl;
@XmlElement(name = "EMAIL")
protected String email;
@XmlElement(name = "Teilnehmer")
protected List<Teilnehmer> teilnehmer;
class 2
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"efn",
"punkteBasisJN",
"punkteZusatzLernkontrolleJN",
"punkteInteraktivitaetJN",
"punkteReferent"
})
@XmlRootElement(name = "Teilnehmer")
public class Teilnehmer {
@XmlElement(name = "EFN", required = true)
protected String efn;
@XmlElement(name = "Punkte_Basis_JN", required = true)
protected String punkteBasisJN;
@XmlElement(name = "Punkte_Zusatz_Lernkontrolle_JN", required = true)
protected String punkteZusatzLernkontrolleJN;
@XmlElement(name = "Punkte_Interaktivitaet_JN", required = true)
protected String punkteInteraktivitaetJN;
@XmlElement(name = "Punkte_Referent")
protected int punkteReferent;
现在我用 JAXB 创建一个 xml:
JAXBElement<eiv.Veranstaltung> tmp = ObjectFactoryNew
.createEvent(event);
JAXBContext jaxbContext = JAXBContext
.newInstance(eiv.Veranstaltung.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-15");
jaxbMarshaller.setProperty("jaxb.noNamespaceSchemaLocation",
"eiv-punktemeldung.xsd");
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(tmp, System.out);
ObjectFactory.java
@XmlRegistry
private static class ObjectFactoryNew {
private static final QName EVENT_QNAME = new QName(
"http://www.w3.org/2001/XMLSchema-instance", "Veranstaltung");
private ObjectFactoryNew() {
}
/**
* Create an instance of {@link JAXBElement }{@code <}
* {@link Veranstaltung } {@code >}
*
*/
@XmlElementDecl(namespace = "http://www.w3.org/2001/XMLSchema-instance", name = "Veranstaltung")
public static JAXBElement<eiv.Veranstaltung> createEvent(
eiv.Veranstaltung value) {
return new JAXBElement<eiv.Veranstaltung>(EVENT_QNAME,
eiv.Veranstaltung.class, null, value);
}
}
输出:
<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<xsi:Veranstaltung xsi:noNamespaceSchemaLocation="eiv-punktemeldung.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VNR>2760012007000000289</VNR>
<Meldungsart>N</Meldungsart>
<Teilnehmeranzahl>1</Teilnehmeranzahl>
<EMAIL>lukas.mustermann@mailinator.com</EMAIL>
<Teilnehmer>
<EFN>802760010002185</EFN>
<Punkte_Basis_JN>J</Punkte_Basis_JN>
<Punkte_Zusatz_Lernkontrolle_JN>N</Punkte_Zusatz_Lernkontrolle_JN>
<Punkte_Interaktivitaet_JN>N</Punkte_Interaktivitaet_JN>
<Punkte_Referent>0</Punkte_Referent>
</Teilnehmer>
</xsi:Veranstaltung>
我怎样才能避免 "xsi:Veranstaltung"?我错了什么?
你的情况是正确的。
private static final QName EVENT_QNAME = new QName(
"http://www.w3.org/2001/XMLSchema-instance", "Veranstaltung");
来自 QName 文档:
public QName(String namespaceURI,
String localPart)
Parameters:
namespaceURI - Namespace URI of the QName
localPart - local part of the QName
因此您的根元素 <Veranstaltung>
具有命名空间 "http://www.w3.org/2001/XMLSchema-instance"
(别名 xsi
)。
如果您不想要此命名空间,则应仅使用本地部分创建 QName
。
private static final QName EVENT_QNAME = new QName("Veranstaltung");
我正在使用 Java 7 并尝试使用 jaxb 从 xsd 创建一个 xml。
我从 xsd.
生成了 Java classesclass1:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"vnr",
"meldungsart",
"teilnehmeranzahl",
"email",
"teilnehmer"
})
@XmlRootElement(name = "Veranstaltung")
public class Veranstaltung {
@XmlElement(name = "VNR", required = true)
protected String vnr;
@XmlElement(name = "Meldungsart", required = true)
protected String meldungsart;
@XmlElement(name = "Teilnehmeranzahl")
protected int teilnehmeranzahl;
@XmlElement(name = "EMAIL")
protected String email;
@XmlElement(name = "Teilnehmer")
protected List<Teilnehmer> teilnehmer;
class 2
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"efn",
"punkteBasisJN",
"punkteZusatzLernkontrolleJN",
"punkteInteraktivitaetJN",
"punkteReferent"
})
@XmlRootElement(name = "Teilnehmer")
public class Teilnehmer {
@XmlElement(name = "EFN", required = true)
protected String efn;
@XmlElement(name = "Punkte_Basis_JN", required = true)
protected String punkteBasisJN;
@XmlElement(name = "Punkte_Zusatz_Lernkontrolle_JN", required = true)
protected String punkteZusatzLernkontrolleJN;
@XmlElement(name = "Punkte_Interaktivitaet_JN", required = true)
protected String punkteInteraktivitaetJN;
@XmlElement(name = "Punkte_Referent")
protected int punkteReferent;
现在我用 JAXB 创建一个 xml:
JAXBElement<eiv.Veranstaltung> tmp = ObjectFactoryNew
.createEvent(event);
JAXBContext jaxbContext = JAXBContext
.newInstance(eiv.Veranstaltung.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-15");
jaxbMarshaller.setProperty("jaxb.noNamespaceSchemaLocation",
"eiv-punktemeldung.xsd");
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(tmp, System.out);
ObjectFactory.java
@XmlRegistry
private static class ObjectFactoryNew {
private static final QName EVENT_QNAME = new QName(
"http://www.w3.org/2001/XMLSchema-instance", "Veranstaltung");
private ObjectFactoryNew() {
}
/**
* Create an instance of {@link JAXBElement }{@code <}
* {@link Veranstaltung } {@code >}
*
*/
@XmlElementDecl(namespace = "http://www.w3.org/2001/XMLSchema-instance", name = "Veranstaltung")
public static JAXBElement<eiv.Veranstaltung> createEvent(
eiv.Veranstaltung value) {
return new JAXBElement<eiv.Veranstaltung>(EVENT_QNAME,
eiv.Veranstaltung.class, null, value);
}
}
输出:
<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<xsi:Veranstaltung xsi:noNamespaceSchemaLocation="eiv-punktemeldung.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VNR>2760012007000000289</VNR>
<Meldungsart>N</Meldungsart>
<Teilnehmeranzahl>1</Teilnehmeranzahl>
<EMAIL>lukas.mustermann@mailinator.com</EMAIL>
<Teilnehmer>
<EFN>802760010002185</EFN>
<Punkte_Basis_JN>J</Punkte_Basis_JN>
<Punkte_Zusatz_Lernkontrolle_JN>N</Punkte_Zusatz_Lernkontrolle_JN>
<Punkte_Interaktivitaet_JN>N</Punkte_Interaktivitaet_JN>
<Punkte_Referent>0</Punkte_Referent>
</Teilnehmer>
</xsi:Veranstaltung>
我怎样才能避免 "xsi:Veranstaltung"?我错了什么?
你的情况是正确的。
private static final QName EVENT_QNAME = new QName(
"http://www.w3.org/2001/XMLSchema-instance", "Veranstaltung");
来自 QName 文档:
public QName(String namespaceURI, String localPart)
Parameters:
namespaceURI - Namespace URI of the QName
localPart - local part of the QName
因此您的根元素 <Veranstaltung>
具有命名空间 "http://www.w3.org/2001/XMLSchema-instance"
(别名 xsi
)。
如果您不想要此命名空间,则应仅使用本地部分创建 QName
。
private static final QName EVENT_QNAME = new QName("Veranstaltung");