2012-10-21 10 views
5

Ich verwende Jaxb in Spring-MVC-Framework, um XML zu generieren. Dies ist das Beispiel von Wurzelelement:Jaxb generierte XML - Entfernen Sie das Standard-Root-Element Namespacepräfix

<ns2:urlset xmlns:ns2="http://www.example.com"> 

Dies ist, was ich will:

<urlset xmlns="http://www.example.com"> 

Ich habe versucht, die folgenden package-info.java zu verwenden, um den Standard-Präfix „ns2“ zu entfernen.

Das Präfix kann auf einen anderen Wert geändert werden, wenn ich ein Präfix für eine andere Zeichenfolge festlege. Das Präfix kann jedoch nicht entfernt werden, indem Präfixwert auf "" gesetzt wird. Es zeigt immer noch den Standard "ns2". Gibt es eine Möglichkeit, das Standardpräfix "ns2" zu entfernen?

Eine andere Frage ist, dass, wenn das "Standalone" -Attribut in der Kopfzeile des Xml auch entfernt werden kann? Wenn ja, kann dies über package-info.java geschehen?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
+0

gleiche Problem = ( – ekitru

Antwort

2

Versuchen Sie folgendes:

package-info.java

@XmlSchema(
    namespace="http://www.sitemaps.org/schemas/sitemap/0.9", 
    elementFormDefault=XmlNsForm.QUALIFIED) 
package com.example.model; 
import javax.xml.bind.annotation.XmlSchema; 
import javax.xml.bind.annotation.XmlNsForm; 

XmlUrlSet.java

@XmlAccessorType(value = XmlAccessType.NONE) 
@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") 
public class XmlUrlSet {...} 
0

wenn die Spitze von alex, funktionierte nicht Sie einen Fehler gefunden kann (zumindest denke ich, dass es eins ist) in der Referenzimplementierung von jaxb. Ich hatte gerade das gleiche Problem: Wenn ich ein JaxbElement zu meiner Modellklasse hinzufügte, fing der RI von jaxb an, meinen Standardnamensraum zu ignorieren. Ich konnte keine andere Lösung finden, als zu Eclipse MOXy zu wechseln (ohne irgendeine andere Modifikation) und es hat funktioniert. (Vorsicht: Achten Sie auf another bug in moxy)

Auch für Ihre zweite Frage, benutzen Sie diese:

JAXBContext jc = JAXBContext.newInstance(...); 
Marshaller m = jc.createMarshaler(); 
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); 
Verwandte Themen