메시지 할당에 Xpath 사용
xpath 함수를 사용하여 메시지 파트에 XPath 값을 할당하거나 메시지 파트를 참조하는 XPath에 값을 할당할 수 있습니다. 메시지 및 메시지 파트에 할당하는 방법에 대한 자세한 내용은 메시지 생성을 참조하세요.
참고
xpath 함수에 대한 자세한 내용은 XPath(XML 경로 언어)에 대한 타사 설명서를 참조하십시오.
참고
xpath 함수의 사용은 메시지 할당에 국한되지 않습니다. 이 함수는 다음 예와 같이 어떤 식에든 사용할 수 있습니다.
If ((System.Double) xpath(_RequestMessage.part, "number(//book[last()]/price)") == 75.00 && (System.Boolean) xpath(msgBoolean, "string(//boolean)") == false)...
참고
문자열에 값을 할당하려면 XPath string() 함수를 사용하십시오. 예:
myString = xpath(msg, "string(/*/book[1]/title)");
참고
엔진은 스키마를 인식하지 못하므로 포함하는 메시지에 들어 있는 노드(전체 경로가 있어야 함)에서만 값을 읽거나 쓸 수 있습니다. 그렇지 않은 경우 예외가 발생합니다. 기본값이 제공된 경우에도 마찬가지입니다.
메시지 파트에서 XPath에 할당
다음 스키마를 살펴보십시오.
<?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>
다음과 같이 함수를 사용하여 해당 스키마 유형의 문서 instance 값을 설정할 수 있습니다.
//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;
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'");
XPath를 사용하여 노드 및 노드 집합에서 할당
XPath를 사용하여 XML 노드 및 노드 집합을 XML 요소, 클래스에 할당하거나 스키마 기반 또는 클래스 기반 메시지에 할당할 수 있습니다.
Book이라는 이름의 XML-serializable 클래스가 있다고 가정하고 다음 예제를 살펴보겠습니다.
[Serializable]
Class Book {...}
예제 1 — 카탈로그에서 네 번째 book 요소를 선택하여 이 요소를 XML 요소 변수에 할당합니다.
myXmlElement = xpath(myMsg, "/catalog/book[3]");
예제 2 — 카탈로그에서 네 번째 book 요소를 선택한 다음 XML deserialization을 사용하여 이 요소를 Book 클래스 인스턴스로 변환합니다.
myBook = xpath(myMsg, "/catalog/book[3]");
예제 3 — 카탈로그에서 네 번째 book 요소를 선택한 다음 이 요소를 Book 유형의 메시지로 변환합니다.
myBookMsg = xpath(myMsg, "/catalog/book[3]");
예제 4 — MyMethod에 매개 변수로 XmlNodeSet이 사용되는 모든 book 요소를 카탈로그에서 선택합니다.
MyMethod(xpath(myMsg, "/catalog/book"));
예제 5 — "BookOfTheMonth" 컨테이너에 book 요소를 추가합니다.
xpath(MyMsg2, "/RecommendedBooks/BookOfTheMonth") = myBook;
예제 6 — 20 이하로 가격이 지정된 모든 book을 권장 book 집합에 추가합니다.
xpath(MyMsg2, "/RecommendedBooks/BestPriceBooks") = xpath(MyMsg, "/catalog/book[@price <= 20]");
예제 7 — XML 요소를 반환하는 사용자 코드를 호출합니다.
xpath(MyMsg2, "/RecommendedBooks/AdvertisedByPartner") = GetPartnerAdvertisedBook();
예제 5와 7을 적용하기 전에 다음을 수행하십시오.
<RecommendedBooks>
<BookOfTheMonth/>
<BestPriceBooks/>
<AdvertisedByPartner/>
</RecommendedBooks>
예제 5와 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>