Verwenden von XPaths in Nachrichtenzuweisungen
Sie können die xpath-Funktion verwenden, um einem Nachrichtenteil einen XPath-Wert zuzuweisen oder einem XPath-Element einen Wert zuzuweisen, der auf ein Nachrichtenteil verweist. Weitere Informationen zum Zuweisen zu Nachrichten und Nachrichtenteilen finden Sie unter Erstellen von Nachrichten.
Hinweis
Weitere Informationen zur XPath-Funktion finden Sie in Drittanbieterdokumentationen zu XML Path Language (XPath).
Hinweis
Die Verwendung der xpath-Funktion ist nicht auf die Nachrichtenzuweisung beschränkt. Sie können sie in jedem Ausdruck verwenden, z. B.:
If ((System.Double) xpath(_RequestMessage.part, "number(//book[last()]/price)") == 75.00 && (System.Boolean) xpath(msgBoolean, "string(//boolean)") == false)...
Hinweis
Wenn Sie einer Zeichenfolge einen Wert zuweisen möchten, verwenden Sie die XPath-Funktion string(). Beispiel:
myString = xpath(msg, "string(/*/book[1]/title)");
Hinweis
Die Engine unterstützt keine Schemas, sodass Sie nur Werte von Knoten lesen und in Knoten schreiben können, wenn diese Knoten mit vollständigem Pfad in der Nachricht vorhanden sind. Andernfalls löst die Engine eine Ausnahme aus. Dies gilt auch, wenn Sie einen Standardwert angeben.
Zuweisen zu einem XPath in einem Nachrichtenteil
Betrachten Sie folgendes Schema:
<?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>
Sie können die Funktion wie folgt verwenden, um Werte für ein Dokument instance dieses Schematyps festzulegen:
//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;
Zuweisen zu einem Nachrichtenteil eines XPaths
//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'");
Zuweisen von Knoten und Knotensätzen mit XPath
Mithilfe von XPath können Sie einem XML-Element, einer Klasse oder einer schemabasierten oder klassenbasierten Nachricht XML-Knoten und -Knotensätze zuweisen.
Angenommen, Sie haben eine XML-serialisierbare Klasse mit dem Namen Book. Beachten Sie dazu folgende Beispiele:
[Serializable]
Class Book {...}
Beispiel 1: Wählen Sie im Katalog das vierte Book-Element aus, und weisen Sie es einer XML-Elementvariablen zu:
myXmlElement = xpath(myMsg, "/catalog/book[3]");
Beispiel 2: Wählen Sie im Katalog das vierte Book-Element aus, und wandeln Sie es mithilfe der XML-Deserialisierung in eine Book-Klasseninstanz um:
myBook = xpath(myMsg, "/catalog/book[3]");
Beispiel 3: Wählen Sie im Katalog das vierte Book-Element aus, und wandeln Sie es in eine Nachricht vom Typ Book um:
myBookMsg = xpath(myMsg, "/catalog/book[3]");
Beispiel 4: Wählen Sie im Katalog alle Book-Elemente aus, in denen für MyMethod ein XmlNodeSet als Parameter festgelegt ist:
MyMethod(xpath(myMsg, "/catalog/book"));
Beispiel 5: Fügen Sie dem Container "BookOfTheMonth" ein Book-Element hinzu:
xpath(MyMsg2, "/RecommendedBooks/BookOfTheMonth") = myBook;
Beispiel 6: Fügen Sie alle Bücher mit einem Preiswert von maximal 20 zu einem Satz empfohlener Bücher hinzu:
xpath(MyMsg2, "/RecommendedBooks/BestPriceBooks") = xpath(MyMsg, "/catalog/book[@price <= 20]");
Beispiel 7: Rufen Sie Benutzercode ab, der ein XML-Element zurückgibt:
xpath(MyMsg2, "/RecommendedBooks/AdvertisedByPartner") = GetPartnerAdvertisedBook();
Vor dem Anwenden der Beispiele 5 und 7:
<RecommendedBooks>
<BookOfTheMonth/>
<BestPriceBooks/>
<AdvertisedByPartner/>
</RecommendedBooks>
Nach dem Anwenden der Beispiele 5 und 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>