Altova MapForce 2024 Professional Edition

Una vez haya generado código a partir del esquema de ejemplo se crea una aplicación C++ de prueba, junto con varias bibliotecas de Altova de apoyo. Recuerde que el esquema de ejemplo (Main.xsd) tiene varias declaraciones de espacios de nombres. En consecuencia, el código generado incluye espacios de nombres que corresponden a alias de espacios de nombres (prefijos) del esquema, que son: Main::ord, Main::pur, Main::cmn y Main::cust.

 

Por lo general, para controlar espacios de nombres y prefijos XML con ayuda de las bibliotecas contenedoras de esquemas, debe contar con estos métodos:

 

DeclareAllNamespacesFromSchema(). Llame a este método si quiere declarar los mismos espacios de nombres en su instancia XML que en el esquema. En cambio, si necesita distintos espacios de nombres, como en este ejemplo, entonces use DeclareNamespace(). El método DeclareAllNamespacesFromSchema() no se usa en este ejemplo porque lo que queremos es crear elementos XML con prefijos que sean ligeramente distintos a los que se declaran en el esquema.

DeclareNamespace(). Llame a este método para crear o sobrescribir el atributo del prefijo del espacio de nombres de un elemento. Para ello primero debe crear ese elemento, bien con el método append() o con appendWithPrefix(), como explicamos a continuación.

appendWithPrefix(). Use este método para anexar un elemento de instancia con un prefijo concreto. Para crear la instancia XML de este ejemplo bastó con llamar a este método solamente para el elemento raíz. Todos los demás elementos se anexaron usando simplemente append() y sus prefijos se añadieron automáticamente basándose en los espacios de nombres a los que pertenece el nombre del elemento.

 

El extracto de código siguiente muestra cómo crear un documento XML con varias declaraciones de espacios de nombres y nombres de elementos prefijados. Más concretamente, genera una instancia de orden de compra, como se puede ver en el Ejemplo: orden de compra. Es importante tener en cuenta que por motivos ilustrativos en el ejemplo algunos prefijos se han sobrescrito en la instancia XML (es decir, no son exactamente los mismos que los que se declaran en el esquema).

 

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();  
}

© 2017-2023 Altova GmbH