Compartir a través de


Uso de XPaths en asignaciones de mensajes

Puede usar la función xpath para asignar un valor XPath a un elemento de mensaje o para asignar un valor a un XPath que hace referencia a una parte de mensaje. Para obtener más información sobre cómo asignar mensajes y elementos de mensaje, vea Construir mensajes.

Nota:

Para obtener más información sobre la función xpath, consulte la documentación de terceros sobre el lenguaje de ruta de acceso XML (XPath).

Nota:

El uso de la función xpath no se limita a la asignación de mensajes. También puede usarlo en cualquier expresión, por ejemplo:

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

Nota:

Si desea asignar un valor a una cadena, use la función string() XPath. Por ejemplo:

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

Nota:

El motor no es compatible con el esquema, por lo que solo puede leer valores de o escribir valores en un nodo que existe en el mensaje contenedor (la ruta de acceso completa debe existir) o el motor generará una excepción. Esto es cierto incluso si se proporciona un valor predeterminado.

Asignación a un XPath en una parte de un mensaje

Tenga en cuenta el esquema siguiente:

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

Puede usar la función como se indica a continuación para establecer valores en una instancia de documento de ese tipo de esquema:

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

Asignación a un elemento de mensaje desde 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 de XPath para asignar a partir de nodos y conjuntos de nodos

También puede usar XPath para asignar nodos XML y conjuntos de nodos a un elemento XML, una clase o un mensaje basado en esquemas o basado en clases.

Supongamos que tiene una clase serializable XML denominada Book y tenga en cuenta los ejemplos siguientes:

[Serializable]  
Class Book {...}  

Ejemplo uno: seleccione el cuarto elemento book del catálogo y asígnelo a una variable de elemento XML:

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

Ejemplo dos: seleccione el cuarto elemento book del catálogo y conviértalo mediante la deserialización XML en una instancia de clase Book:

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

Ejemplo tres: seleccione el cuarto elemento book del catálogo y conviértalo en un mensaje de tipo Book:

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

Ejemplo Cuatro: seleccione todos los elementos de libro del catálogo, donde MyMethod toma xmlNodeSet como parámetro:

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

Ejemplo cinco: agregue un elemento "libro" al contenedor "BookOfTheMonth".

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

Ejemplo Seis: agregue todos los libros que tengan un precio de veinte o menos a un conjunto de libros recomendados:

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

Ejemplo Siete: llamar al código de usuario que devuelve un elemento XML:

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

Antes de aplicar ejemplos cinco y siete:

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

Después de aplicar ejemplos cinco y siete:

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