Ich versuche mit JAXB eine XML-Datei zu entpacken, deren Schema durch eine DTD (ugh!) Definiert ist.JAXB Attribut nicht mit Colon (:) im Namen umgehen?
Der externe Anbieter der DTD eines des Elements angegeben hat Attribute als xml:lang
:
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
Diese in die xjc generierten kommt Klasse (Standard Generation, keine * .xjb Magie) als:
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
wenn jedoch gültige XML-Dateien mit JAXB unmarshalling ist das xmlLang
Attribut immer null
.
Wenn ich die XML-Datei bearbeitet, ersetzt xml:lang
mit lang
und verändert die @XmlAttribute
übereinstimmen, unmarshalling erfolgreich war (das heißt nicht-Attribute null
waren).
Ich habe diese http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html gefunden. Aber die Auflösung, die es gab, war es, in XML-Schema usw. zu konvertieren. Meine starke Präferenz besteht darin, direkt von einer unveränderten DTD zu gehen (da sie extern bereitgestellt und durch einen ISO-Standard definiert ist).
Ist das ein JAXB-Fehler? Fehle ich etwas über "Namespaces" in Attributnamen?
FWIW, java -version
= "bauen 1.6.0_20-b02" und xjc -version
= "xjc Version "JAXB 2.1.10 in JDK 6""
Welche DTD ist das? 'xml: lang' ist ein Meta-Attribut für ein XML-Schema, also beschreibt die DTD etwas, das von einem Schema stammt, was mir nahelegt, dass es ein vollständiges Schema gibt. – skaffman
AFAIK, der Herausgeber stellt nur eine DTD zur Verfügung. Es wäre schwer vorstellbar, dass sie eine DTD veröffentlichen, die auf einem Schema basiert, aber Letzteres nicht verfügbar macht. Ich habe jedoch den Autor einiger verwandter Werkzeuge fragen lassen, ob ich ein Schema verwende, um die JAXB-Objekte zu erzeugen, also könnte etwas da draußen sein ... –
Danke für den Nabble-Link. Du hast mir das Leben leichter gemacht. – chaostheory