Salut.

Notre client souhaite ajouter un espace de nommage à son fichier XML... mais de manière "un peu particulière".
De:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<Root schemaVersion="1.1" >
  <Elt1>
    <Elt11>
      <Elt111 Att1111="value1111" Att1112="value1112">
      </Elt111>
    </Elt11>
  </Elt1>
  <Elt2>
    <Elt21 Att211="value211" Att212="value212">
    ...
    </Elt21>
  </Elt2>
</Root>
Il souhaite passer à:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<Root schemaVersion="1.1" xsi:noNamespaceSchemaLocation="aSchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Elt1>
    <Elt11>
      <Elt111 Att1111="value1111" Att1112="value1112">
      </Elt111>
    </Elt11>
  </Elt1>
  <Elt2>
    <Elt21 Att211="value211" xsi:Att212="value212">
    ...
    </Elt21>
  </Elt2>
</Root>
Et pas plus.

Nous utilisons XmlBeans pour générer ce fichier.
Rien trouvé de disponible dans les méthodes des classes générées.
Par contre, pour l'espace de nommage, avec XmlCursor, j'ai pu faire ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
XmlCursor schemaCursor = myDoc.newCursor();
QName myQName = new QName("http://www.w3.org/2001/XMLSchema-instance", "noNamespaceSchemaLocation", "xsi");
if (schemaCursor.toFirstChild())
{
    schemaCursor.setAttributeText(myQName, prop.getProperty("SchemaLocation"));
}
schemaCursor.dispose();
Et ça me convient... sauf qu'impossible de coller le bon préfixe à l'attribut Att212!
J'ai essayé:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
aNewCursor.insertAttributeWithValue("Att212", "value212");
aNewCursor.insertAttributeWithValue("Att212", "http://www.w3.org/2001/XMLSchema-instance", "value212");
aNewCursor.insertAttributeWithValue("Att212", , "xsi", "value212");
aNewCursor.insertAttributeWithValue("noNamespaceSchemaLocation" ,"http://www.w3.org/2001/XMLSchema-instance", prop.getProperty("SchemaLocation"));
aNewCursor.insertAttributeWithValue("Att212", "value212");
aNewCursor.insertNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance").

Sans succès.
Je dois sûrement pas bien comprendre la documentation ou oublier quelque chose, mais même après une bonne nuit de sommeil (tout est relatif...), je ne trouve pas.

Et vous?

Merci d'avance.