Uso de XPath en las asignaciones de mensajes
Puede usar la función xpath para asignar un valor XPath a una parte de mensaje o para asignar un valor a un XPath que haga referencia a una parte del 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 acerca de la función xpath, consulte la documentación de terceros sobre el lenguaje XML Path (XPath).
Nota
El uso de la función xpath no se limita a la asignación de mensajes. También se puede usar 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, utilice la función string() de XPath. Por ejemplo:
myString = xpath(msg, "string(/*/book[1]/title)");
Nota
El motor no es compatible con esquemas, por lo que solo puede leer o escribir valores en los nodos existentes en el mensaje contenedor (debe existir la ruta de acceso completa); de lo contrario, el motor generará una excepción. Esto ocurre aunque proporcione un valor predeterminado.
Asignar a una XPath en una parte de mensaje
Considere 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;
Asignar a una parte de mensaje desde una 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'");
Usar XPath para asignar desde nodos y conjuntos de nodos
También puede usar XPath para asignar nodos y conjuntos de nodos XML a un elemento, una clase, un mensaje basado en un esquema o un mensaje basado en una clase XML.
Suponga que tiene una clase serializable XML denominada Book. Observe los siguientes ejemplos:
[Serializable]
Class Book {...}
Ejemplo 1: selección del cuarto elemento "book" del catálogo y asignación a una variable "XmlElement":
myXmlElement = xpath(myMsg, "/catalog/book[3]");
Ejemplo 2: selección del cuarto elemento "book" del catálogo y conversión mediante deserialización XML en una instancia de clase "Book":
myBook = xpath(myMsg, "/catalog/book[3]");
Ejemplo 3: selección del cuarto elemento "book" del catálogo y conversión en un mensaje de tipo Book:
myBookMsg = xpath(myMsg, "/catalog/book[3]");
Ejemplo 4: selección de todos los elementos "book" del catálogo, donde "MyMethod" usa un "XmlNodeSet" como parámetro:
MyMethod(xpath(myMsg, "/catalog/book"));
Ejemplo 5: se agrega un elemento "book" al contenedor "BookOfTheMonth":
xpath(MyMsg2, "/RecommendedBooks/BookOfTheMonth") = myBook;
Ejemplo 6: adición de todos los libros cuyo precio sea 20 o menos a un conjunto de libros recomendados:
xpath(MyMsg2, "/RecommendedBooks/BestPriceBooks") = xpath(MyMsg, "/catalog/book[@price <= 20]");
Ejemplo 7: llamada a código de usuario que devuelve un elemento XML:
xpath(MyMsg2, "/RecommendedBooks/AdvertisedByPartner") = GetPartnerAdvertisedBook();
Antes de aplicar los ejemplos 5 y 7:
<RecommendedBooks>
<BookOfTheMonth/>
<BestPriceBooks/>
<AdvertisedByPartner/>
</RecommendedBooks>
Después de aplicar los ejemplos 5 y 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>