Altova XMLSpy 2024 Enterprise Edition

Après avoir généré du code depuis le schéma d’exemple, une application C++ test est créée, avec plusieurs bibliothèques Altova de support. 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 : Main::ord, Main::pur, Main::cmn et 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).

 

void Example()
{
  // Create the XML document and append the root element
  Main::pur::CMain doc = Main::pur::CMain::CreateDocument();
  Main::pur::CPurchaseType purchase = doc.Purchase.appendWithPrefix(_T("p"));
 
  // Set schema location
  doc.SetSchemaLocation(_T("Main.xsd"));
 
  // Declare namespaces on root element
  purchase.DeclareNamespace(_T("o"), _T("http://NamespaceTest.com/OrderTypes"));
  purchase.DeclareNamespace(_T("c"), _T("http://NamespaceTest.com/CustomerTypes"));
  purchase.DeclareNamespace(_T("cmn"), _T("http://NamespaceTest.com/CommonTypes"));
 
  // Append the OrderDetail element
  Main::ord::COrderType order = purchase.OrderDetail.append();
  Main::ord::CItemType item = order.Item.append();
  item.ProductName.append() = _T("Lawnmower");
  item.Quantity.append() = 1;
  item.UnitPrice.append() = 148.42;
 
  // Append the PaymentMethod element
  Main::cmn::CPaymentMethodTypeType paymentMethod = purchase.PaymentMethod.append();
  paymentMethod.SetEnumerationValue(Main::cmn::CPaymentMethodTypeType::k_VISA);
 
  // Append the CustomerDetails element
  Main::cust::CCustomerType customer = purchase.CustomerDetails.append();
  customer.Name.append() = _T("Alice Smith");
  Main::cmn::CAddressType deliveryAddress = customer.DeliveryAddress.append();
  deliveryAddress.Line1.append() = _T("123 Maple Street");
  deliveryAddress.Line2.append() = _T("Mill Valley");
  Main::cmn::CAddressType billingAddress = customer.BillingAddress.append();
  billingAddress.Line1.append() = _T("8 Oak Avenue");
  billingAddress.Line2.append() = _T("Old Town");
 
  // Save to file and release object from memory
  doc.SaveToFile(_T("Main1.xml"), true);
  doc.DestroyDocument();  
}

© 2018-2024 Altova GmbH