Condividi tramite


Uso di XPath nelle assegnazioni a messaggi

È possibile usare la funzione xpath per assegnare un valore XPath a una parte del messaggio oppure 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 Creazione di messaggi.

Nota

Per ulteriori informazioni sulla funzione xpath, consultare la documentazione di terze parti su XML Path Language (XPath).

Nota

L'uso della funzione xpath non è limitato all'assegnazione di messaggi. ma può essere utilizzata anche in qualsiasi espressione, come nell'esempio seguente:

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

Nota

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

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

Nota

Poiché il motore di messaggistica non è compatibile con gli schemi, è possibile eseguire la lettura o la scrittura di valori soltanto in un nodo presente nel messaggio contenente lo schema (deve essere presente il percorso completo). In caso contrario, il motore genererà un'eccezione. Questa condizione si verifica anche se si specifica un valore predefinito.

Assegnazione a un XPath in una parte di 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'");  

Utilizzo di XPath per l'assegnazione da nodi e da gruppi di nodi

È possibile utilizzare XPath anche per assegnare nodi e gruppi di nodi XML a un elemento XML, a una classe o a un messaggio basato su schemi o classi.

Si supponga di disporre di una classe serializzabile in XML denominata Book e si considerino gli esempi seguenti:

[Serializable]  
Class Book {...}  

Esempio 1 - Selezionare il quarto elemento "book" nel catalogo, quindi assegnarlo a una variabile di elemento XML:

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

Esempio 2 - Selezionare il quarto elemento "book" nel catalogo, quindi convertirlo utilizzando la deserializzazione XML in un'istanza della classe Book.

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

Esempio 3 - Selezionare il quarto elemento "book" nel catalogo, quindi convertirlo in un messaggio di tipo Book:

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

Esempio 4 - Selezionare tutti gli elementi "book" nel catalogo, dove MyMethod accetta come parametro un valore XmlNodeSet:

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

Esempio 5 - Aggiungere un elemento "book" al contenitore "BookOfTheMonth":

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

Esempio 6 - Aggiungere tutti gli elementi "book" con prezzo uguale o inferiore a venti a un gruppo di libri ("books") consigliati:

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

Esempio 7 - Chiamare il codice utente che restituisce un elemento XML:

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

Prima di applicare gli esempi 5 e 7:

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

Dopo avere applicato gli esempi 5 e 7:

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