Ho un file stampato con uno spazio dei nomi predefinito. Gli elementi sono stampati con un prefisso di ns2, ho bisogno di questo per essere rimosso, come è con il mio codice:Rimuovi ns2 come prefisso dello spazio dei nomi predefinito
<ns2:foo xmlns:ns2="http://namespace" />
come voglio che sia:
<foo xmlns="http://namespace" />
questo è il modo che ho codificato, qualcosa che, come la vedo io dovrebbe essere sufficiente per il ns2 di andare via:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:bar="http://namespace" targetNamespace="http://namespace"
elementFormDefault="qualified">
...
generato package-info risulta in questo modo:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://namespace",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.foo.bar;
ho creare il file in questo modo:
JAXBContext jaxbContext = JAXBContext.newInstance(generatedClassesPackage);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(new JAXBElement<Foo>(new QName("http://namespace", "Foo"),
Foo.class, rootFoo), outputStream);
generatedClassesPackage è il pacchetto in cui package-info.java e gli elementi sono.
L'oggetto Foo è definito e presenta elementi come questa ::
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"group"
})
@XmlRootElement(name = "Foo")
public class Foo {
@XmlElement(name = "Group", required = true)
protected List<Group> group;
E 'qualcosa che ho perso? o ho frainteso come funziona?
Se gli si assegna uno spazio dei nomi e lo si abilita, è necessario che lo spazio dei nomi sia da qualche parte valido per l'xsd. È possibile rimuovere del tutto il namespace o modificare il prefisso per essere qualcosa di più gestibile o modificare l'elemento di livello superiore in modo da avere il xmlns del namespace principale in modo che non ci siano prefissi per qualcosa in quel namespace. Quindi quello che vuoi non è un xml valido per i tuoi xsds. Vuoi elementi di namespace o no? –
Penso che tu mi abbia confuso con non mostrare gli attributi su quell'elemento foo. Stai dicendo che vuoi ' ' invece di ' '? –
@DMoses sì, avrei dovuto includerlo, e sì, è così che lo voglio :). Voglio questo: xmlns: ns2 = "http: // namespace" nell'elemento root. – Vegard