Altova XMLSpy 2024 Enterprise Edition

Après avoir généré du code depuis le schéma de bibliothèque (voir Schéma d’exemple), une application Java de test est créée, avec plusieurs bibliothèques Altova. Rappelez-vous que le schéma d’exemple (Main.xsd) a plusieurs déclarations d’espace de noms. Par conséquent, le code généré comprend des espaces de noms qui correspondent aux alias d’espace de noms (préfixes) provenant du schéma : com.Main.ord, com.Main.pur, com.Main.cmn, et com.Main.cust.

 

En général, afin de contrôler les espaces de noms XML et les préfixes avec l’aide des bibliothèques de schéma, vous disposez des méthodes suivantes :

 

declareAllNamespacesFromSchema(). Appeler cette méthode si vous souhaitez déclarer les mêmes espaces de noms dans votre instance XML que dans le schéma. Sinon, si vous souhaitez utiliser d’autres espaces de noms que ceux utilisés dans cet exemple, vous devriez utiliser declareNamespace(). La méthode declareAllNamespacesFromSchema() n’est pas utilisée dans cet exemple parce que nous souhaitons utiliser spécifiquement des éléments XML avec des préfixes qui sont légèrement différents de ceux déclarés dans le schéma.

declareNamespace(). Appeler cette méthode pour créer ou contourner l’attribut de préfixe d’espace de noms existant sur un élément. L’élément doit déjà être créé en utilisant soit la méthode append() soit appendWithPrefix(), comme illustré ci-dessous.

appendWithPrefix(). Utiliser cette méthode pour apposer un élément d’instance avec un préfixe spécifique. Pour créer l’instance XML illustrée dans cet exemple, il a suffit d’appeler cette méthode pour l’élément root uniquement. Tous les autres éléments ont été apposés en utilisant uniquement append(), et leurs préfixes ont été ajoutés automatiquement sur la base de leurs espaces de noms, conformément aux règles ci-dessus.

 

L’extrait de code ci-dessous vous montre comment créer un document XML avec plusieurs déclarations d’espace de noms et des noms d’élément préfixés. En particulier, il génère une instance Purchase Order comme illustré dans l’Example : Purchase Order. Plus important encore, à des fins d’illustration, certains préfixes sont contournés dans l’instance XML (c’est à dire qu’ils ne sont tout à fait identiques que ceux déclarés dans le schéma).

 

protected static void example() throws Exception {
  // Create the XML document and append the root element
  com.Main.pur.Main2 doc = com.Main.pur.Main2.createDocument();
  com.Main.pur.PurchaseType purchase = doc.Purchase.appendWithPrefix("p");
 
  // Set schema location
  doc.setSchemaLocation("Main.xsd");
 
  // Declare namespaces on root element
  purchase.declareNamespace("o", "http://NamespaceTest.com/OrderTypes");
  purchase.declareNamespace("c", "http://NamespaceTest.com/CustomerTypes");
  purchase.declareNamespace("cmn", "http://NamespaceTest.com/CommonTypes");
 
  // Append the OrderDetail element
  com.Main.ord.OrderType order = purchase.OrderDetail.append();
  com.Main.ord.ItemType item = order.Item.append();
  item.ProductName.append().setValue("Lawnmower");
  item.Quantity.append().setValue(1);
  java.math.BigDecimal price = new java.math.BigDecimal("148.42");
  item.UnitPrice.append().setValue(price);
 
  // Append the PaymentMethod element
  com.Main.cmn.PaymentMethodTypeType paymentMethod = purchase.PaymentMethod.append();
  paymentMethod.setEnumerationValue(com.Main.cmn.PaymentMethodTypeType.EVISA);
 
  // Append the CustomerDetails element
  com.Main.cust.CustomerType customer = purchase.CustomerDetails.append();
  customer.Name.append().setValue("Alice Smith");
  com.Main.cmn.AddressType deliveryAddress = customer.DeliveryAddress.append();
  deliveryAddress.Line1.append().setValue("123 Maple Street");
  deliveryAddress.Line2.append().setValue("Mill Valley");
  com.Main.cmn.AddressType billingAddress = customer.BillingAddress.append();
  billingAddress.Line1.append().setValue("8 Oak Avenue");
  billingAddress.Line2.append().setValue("Old Town");
 
  // Save to file
  doc.saveToFile("PurchaseOrder.xml", true);
}

© 2017-2023 Altova GmbH