7 Stimmen

JAXB fügt Namespace zum übergeordneten Element hinzu, aber nicht zu den enthaltenen untergeordneten Elementen

Ich habe eine XSD erstellt und JAXB verwendet, um daraus Klassen zu generieren.

Hier sind meine XSDs

myDoc.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mydoc.org"
       targetNamespace="http://www.mydoc.org"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:mtp="http://www.mytypes.com" elementFormDefault="qualified">

<xs:import namespace="http://www.mytypes.com" schemaLocation="mytypes.xsd" />
<xs:element name="myDoc">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="crap" type="xs:string"/>
      <xs:element ref="mtp:foo"/>
      <xs:element ref="mtp:bar"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

mytypes.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.mytypes.com"
       xmlns="http://www.mytypes.com"
       xmlns:tns="http://www.mytypes.com"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       attributeFormDefault="qualified" elementFormDefault="qualified">

  <xs:element name="foo" type="tns:Foo"/>
  <xs:element name="bar" type="tns:Bar"/>
  <xs:element name="spam" type="tns:Spam"/>

  <xs:simpleType name="Foo">
    <xs:restriction base="xs:string"></xs:restriction>
  </xs:simpleType>

  <xs:complexType name="Bar">
    <xs:sequence>
      <xs:element ref="spam"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="Spam">
    <xs:restriction base="xs:string" />
  </xs:simpleType>

</xs:schema>

Das zugehörige Dokument ist

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
  <crap>real crap</crap>
  <ns2:foo>bleh</ns2:foo>
  <ns2:bar>
    <spam>blah</spam>
  </ns2:bar>
</myDoc>

Beachten Sie, dass die <spam> Element verwendet den Standard-Namensraum. Ich möchte, dass es den ns2 Namensraum. Das Schema (mytypes.xsd) drückt die Tatsache aus, dass <spam> ist enthalten in <bar> die in der XML-Instanz an den ns2 Namensraum.

Ich zerbreche mir seit über einer Woche den Kopf darüber und würde gerne ns2 Präfix erscheint in <spam> . Was soll ich tun?

Erforderlich:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
  <crap>real crap</crap>
  <ns2:foo>bleh</ns2:foo>
  <ns2:bar>
    <ns2:spam>blah</ns2:spam><!--NS NS NS-->
  </ns2:bar>
</myDoc>

-1voto

aravind Punkte 1

Haben u überprüfen Sie Ihren Code, dass Sie Ihre ElementType als " angegeben haben Spam ", sondern unter bar als "Spam" bezeichnet. dieses Kapital " S " und kleine " s " in Ihrem Code, wenn es nicht stört, tut es mir leid, aber wenn es wirklich stört, müssen Sie es richtig verwenden. Versuchen Sie, verwenden Sie "Spam" über überall und überprüfen Sie es aus na

-- sorry, ich bin ein Anfänger in xslt, xml, xsd und stuffs und kein Wissen über JAXB. aber im Allgemeinen, wenn wir über das Schreiben von Xml-Dokumenten mit Xsd's lesen, würden wir immer Pflege der Groß-/Kleinschreibung als auch nehmen.

Tut mir leid, wenn diese Antwort Ihr Problem nicht löst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X