Altova MapForce 2024 Enterprise Edition

Nachdem Sie anhand des Schemas "Library" (siehe Beispielschema) Code generiert haben, wird eine C#-Testapplikation sowie eine Reihe von unterstützenden Altova-Bibliotheken generiert. Wie bereits erwähnt, hat das Beispielschema (Main.xsd) mehrere Namespace-Deklarationen. Der generierte Code enthält daher die folgenden Namespaces, die Namespace-Aliassen (Präfixen) aus dem Schema entsprechen: Main::ord, Main::pur, Main::cmn und Main::cust.

 

Wenn Sie XML Namespaces und -Präfixe mit Hilfe von Schema Wrapper-Bibliotheken festlegen möchten, stehen Ihnen die folgenden Methoden zur Verfügung:

 

DeclareAllNamespacesFromSchema(). Mit Hilfe dieser Methode können Sie in Ihrer XML-Instanzdatei dieselben Namespaces wie im Schema deklarieren. Wenn Sie, wie in diesem Beispiel andere Namespaces benötigen, verwenden Sie DeclareNamespace(), Die Methode DeclareAllNamespacesFromSchema() wird in diesem Beispiel nicht verwendet, weil wir hier XML-Elemente erstellen möchten, deren Präfixe sich von den im Schema deklarierten geringfügig unterscheiden.

DeclareNamespace(). Mit Hilfe dieser Methode können Sie ein Namespace-Präfix-Attribut in einem Element erstellen oder das vorhandene überschreiben. Das Element muss bereits erstellt worden sein - entweder mit der Methode append() oder mit appendWithPrefix(), wie weiter unten gezeigt.

appendWithPrefix(). Mit Hilfe dieser Methode können Sie ein bestimmtes Präfix an ein Instanzelement anhängen. Um das in diesem Beispiel gezeigte XML-Instanzdokument zu erstellen, genügte es, diese Methode nur für das Root-Element aufzurufen. Alle anderen Elemente wurden durch Aufruf von append() erstellt. Ihr Präfix wurde automatisch gemäß den obigen Regeln auf Basis des Namespace hinzugefügt.

 

Im Codefragment unten sehen Sie, wie Sie ein XML-Dokument mit mehreren Namespace-Deklarationen und als Präfix vorangestellten Elementnamen erstellen. Dabei wird eine Bestellungsinstanz, wie im Beispiel: Bestellung gezeigt, generiert. Beachten Sie bitte, dass einige Präfixe in der XML-Instanz zur Darstellungszwecken außer Kraft gesetzt werden (d.h. Sie sind nicht genau gleich wie die im Schema deklarierten).

 

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