Utilisation des XPath dans une assignation de message
Vous pouvez utiliser la fonction xpath pour affecter une valeur XPath à un composant de message ou pour affecter une valeur à un XPath qui fait référence à un composant de message. Pour plus d’informations sur l’attribution de messages et de parties de message, consultez Construction de messages.
Notes
Pour plus d'informations sur la fonction xpath, voir la documentation tierce sur le langage XML (XPath).
Notes
L’utilisation de la fonction xpath n’est pas limitée à l’attribution de messages. Vous pouvez également l'utiliser dans d'autres expressions, telles que :
If ((System.Double) xpath(_RequestMessage.part, "number(//book[last()]/price)") == 75.00 && (System.Boolean) xpath(msgBoolean, "string(//boolean)") == false)...
Notes
Si vous souhaitez assigner une valeur à une chaîne, utilisez la fonction XPath string(). Par exemple :
myString = xpath(msg, "string(/*/book[1]/title)");
Notes
Le moteur ne tient pas compte des schémas. Vous pouvez donc uniquement lire les valeurs à partir d'un nœud existant ou écrire des valeurs dans ce nœud d'un message (le chemin d'accès complet doit être indiqué), sinon le moteur lève une exception. Ceci est vrai même si vous fournissez une valeur par défaut.
Affectation à un XPath dans une partie de message
Examinez le schéma suivant :
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="catalog">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" type="xs:string" />
<xs:element name="LastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:string" />
</xs:sequence>
<xs:attribute name="country" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Vous pouvez utiliser la fonction comme suit pour définir des valeurs sur un document instance de ce type de schéma :
//assumes that a message named _ResponseMessage is already constructed
_ResponseMessage.part = _RequestMessage.part;
xpath(_ResponseMessage.part, "/*/book[1]/@country") = "USA";
xpath(_ResponseMessage.part, "/*/book[1]/title") = "Legends";
xpath(_ResponseMessage.part, "/*/book[1]/author/FirstName") = "A";
xpath(_ResponseMessage.part, "/*/book[1]/author/LastName") = "B";
xpath(_ResponseMessage.part, "/*/book[1]/price") = 50;
Affectation à une partie de message à partir d'un XPath
//assumes that a message named objMessage is already constructed
objMessage.BooleanPart = xpath("false()");
objMessage.IntPart = xpath("100");
objMessage.StringPart = xpath("'Hello'");
objMessage.StringPart2 = xpath("'World'");
Utilisation de XPath pour affecter des valeurs à partir de nœuds et de jeux de nœuds
Vous pouvez également utiliser XPath pour affecter des nœuds et jeux de nœuds XML à un élément XML, une classe, ou encore un message basé sur un schéma ou une classe.
Supposons que vous utilisiez une classe sérialisable XML intitulée « Book » (livre, en anglais). Examinez les exemples suivants :
[Serializable]
Class Book {...}
Exemple un : sélectionnez le quatrième élément « book » du catalogue et affectez-le à une variable d'élément XML :
myXmlElement = xpath(myMsg, "/catalog/book[3]");
Exemple deux : sélectionnez le quatrième élément « book » du catalogue et convertissez-le à l'aide de la désérialisation XML en une instance de classe Book :
myBook = xpath(myMsg, "/catalog/book[3]");
Exemple trois : sélectionnez le quatrième élément « book » du catalogue et convertissez-le en un message de type Book :
myBookMsg = xpath(myMsg, "/catalog/book[3]");
Exemple quatre : sélectionnez tous les éléments « book » du catalogue, où MyMethod utilise un XmlNodeSet en tant que paramètre :
MyMethod(xpath(myMsg, "/catalog/book"));
Exemple cinq : ajoutez un élément « book » au conteneur « BookOfTheMonth » :
xpath(MyMsg2, "/RecommendedBooks/BookOfTheMonth") = myBook;
Exemple six : ajoutez tous les livres dont le prix est inférieur ou égal à vingt à un ensemble de livres recommandés :
xpath(MyMsg2, "/RecommendedBooks/BestPriceBooks") = xpath(MyMsg, "/catalog/book[@price <= 20]");
Exemple sept : appelez le code utilisateur retournant un élément XML :
xpath(MyMsg2, "/RecommendedBooks/AdvertisedByPartner") = GetPartnerAdvertisedBook();
Avant d'appliquer les exemples cinq et sept :
<RecommendedBooks>
<BookOfTheMonth/>
<BestPriceBooks/>
<AdvertisedByPartner/>
</RecommendedBooks>
Après application des exemples cinq et sept :
<RecommendedBooks>
<BookOfTheMonth>
<Book country="USA">
<title>McSharry</title>
<author>
<FirstName>Nancy</FirstName>
<LastName>Jensen</LastName>
</author>
</Book>
</BookOfTheMonth>
<BestPriceBooks/>
<AdvertisedByPartner>
<Book country="USA">
<title>The Rooster</title>
<author>
<FirstName>Mindy</FirstName>
<LastName>Martin</LastName>
</author>
</Book>
</AdvertisedByPartner>
</RecommendedBooks>