Я собрал XSD и использовал JAXB для генерации из него классов.
Вот мои XSD-
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>
Документ составлен -
<?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>
Обратите внимание, что элемент <spam>
использует пространство имен по умолчанию. Я хотел бы использовать пространство имен ns2
. Схема (mytypes.xsd) выражает тот факт, что <spam>
содержится в <bar>
, который в экземпляре XML связан с пространством имен ns2
.
Я ломал голову над этим более недели, и я хотел бы, чтобы префикс ns2
появился в <spam>
. Что мне делать?
Обязательно:
<?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>