Je suis très novice en matière de JAXB et de Java. J'ai utilisé xjc, et je remplace les espaces de noms personnalisés ns1 ns2 etc. en utilisant mon propre namespacemapper. Le java s'exécute à travers Matlab, il n'est donc pas formaté exactement comme le java habituel. Toute réponse directe en Java est la bienvenue, car je devrais être capable de le convertir.
Voici ce que je veux :
<String> blah </String>
Au lieu de cela, après le triage, j'obtiens :
<String xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
blah
</String>
Y a-t-il un moyen d'enlever les "xmlns:ns4" et autres de l'élément ?
Le code (matlab)java correspondant est :
a=javax.xml.namespace.QName('String');
c=JAXBElement(a, inner_class, 'blah');
où c est ajouté ultérieurement à la liste qui contient l'élément String.
jxb = JAXBContext.newInstance('mypackage');
jaxbMarshaller = jxb.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty('com.sun.xml.internal.bind.namespacePrefixMapper', MyCustomMapper());
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, 'http://thelocationofmyschema.com')
jaxbMarshaller.marshal(jaxbclassinstance, file);
Mon XML est fonctionnel, mais pour des raisons de propreté et de cohérence, j'aimerais supprimer les xmlns si c'est relativement simple.
Merci ! C'est ma toute première question sur stackoverflow, désolé si elle n'est pas à la hauteur.
UPDATE
J'ai résolu ce problème. Deux choses étaient nécessaires : au lieu de "blah j'ai fait
blah=java.lang.String('blah')
quelque chose que j'oublie de faire pour java dans matlab . Deuxièmement, lors de la réalisation du JAXBElement au lieu d'utiliser une variable inner_class, si j'utilise la variable blah.getClass() il s'imprime sans aucune qualification. Je me rends compte maintenant qu'il s'agissait plus d'une question sur le mashalling que d'une question sur l'utilisation du logiciel. QName question.