Condividi tramite


Uso di XPath nelle assegnazioni di messaggi

È possibile utilizzare la funzione xpath per assegnare un valore XPath a una parte del messaggio o per assegnare un valore a un XPath che fa riferimento a una parte del messaggio. Per altre informazioni sull'assegnazione a messaggi e parti di messaggio, vedere Costruzione di messaggi.

Annotazioni

Per altre informazioni sulla funzione xpath, vedere la documentazione di terze parti sul linguaggio XPath (XML Path Language).

Annotazioni

L'uso della funzione xpath non è limitato all'assegnazione di messaggi. È anche possibile usarlo in qualsiasi espressione, ad esempio:

If ((System.Double) xpath(_RequestMessage.part, "number(//book[last()]/price)") == 75.00 && (System.Boolean) xpath(msgBoolean, "string(//boolean)") == false)...  

Annotazioni

Se si desidera assegnare un valore a una stringa, usare la funzione XPath string(). Per esempio:

myString = xpath(msg, "string(/*/book[1]/title)");  

Annotazioni

Il motore non è compatibile con lo schema, pertanto è possibile leggere solo i valori da o scrivere valori in un nodo presente nel messaggio contenitore (il percorso completo deve esistere) oppure il motore genererà un'eccezione. Questo vale anche se si specifica un valore predefinito.

Assegnazione a un XPath in una parte del messaggio

Si consideri lo schema seguente:

<?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>  

È possibile usare la funzione come indicato di seguito per impostare i valori in un'istanza del documento di tale tipo di schema:

//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;  

Assegnazione a una parte di messaggio da 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'");  

Uso di XPath per l'assegnazione da nodi e set di nodi

È anche possibile usare XPath per assegnare nodi e set di nodi XML a un elemento XML, a una classe o a un messaggio basato su schema o basato su classi.

Si supponga di avere una classe serializzabile XML denominata Book e considerare gli esempi seguenti:

[Serializable]  
Class Book {...}  

Esempio 1: selezionare il quarto elemento libro dal catalogo e assegnarlo a una variabile elemento XML:

myXmlElement = xpath(myMsg, "/catalog/book[3]");  

Esempio due: selezionare il quarto elemento libro dal catalogo e convertirlo usando la deserializzazione XML in un'istanza della classe Book:

myBook = xpath(myMsg, "/catalog/book[3]");  

Esempio Tre : selezionare il quarto elemento libro dal catalogo e convertirlo in un messaggio di tipo Book:

myBookMsg = xpath(myMsg, "/catalog/book[3]");  

Esempio Quattro: selezionare tutti gli elementi del catalogo, dove MyMethod accetta xmlNodeSet come parametro:

MyMethod(xpath(myMsg, "/catalog/book"));  

Esempio Cinque : aggiungere un elemento book al contenitore "BookOfTheMonth":

xpath(MyMsg2, "/RecommendedBooks/BookOfTheMonth") = myBook;  

Esempio Sei : aggiungere tutti i libri a prezzi a venti o meno a un set di libri consigliati:

xpath(MyMsg2, "/RecommendedBooks/BestPriceBooks") = xpath(MyMsg, "/catalog/book[@price <= 20]");  

Esempio Sette: chiamare il codice utente che restituisce un elemento XML:

xpath(MyMsg2, "/RecommendedBooks/AdvertisedByPartner") = GetPartnerAdvertisedBook();  

Prima di applicare esempi cinque e sette:

<RecommendedBooks>  
       <BookOfTheMonth/>  
       <BestPriceBooks/>  
       <AdvertisedByPartner/>  
</RecommendedBooks>  

Dopo aver applicato esempi cinque e sette:

<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>