Aaron H. Kim Fearless Integration Maniac

BizTalk Orchestration에서 xpath 사용하기

2008-06-09
Aaron Kim

이걸 아직 포스팅한적이 없다니 놀랍네요.
오늘 제 부사수가 물어봐서 답변하는 김에 여기에 정리합니다.

xpath는 distinguished field나 promoted property와 달리 사용시 Xml 문서를 통째로 메모리로 로드하므로 성능을 위해 가급적 사용하지 않는게 좋습니다만, 피치못하게 사용해야 하는 경우도 있기 마련입니다.

값이 반복되는 레코드의 경우가 그렇습니다. 값이 반복될 경우, 승격(Promotion)이 되지 않거든요. ^^

이런 경우 Orchestraion의 Expression Shape에서 built-in 함수인 xpath()를 사용해
값을 넣고 빼는 샘플 코드는 아래와 같습니다.

// Get the Count of the Items node  
nNumberItems = System.Convert.ToInt32(xpath(InXML, "count(//Item)"));  
  
// Get the customer number  
sCustomer = xpath(InXML,"string(//Customer)");  
  
// Get a specific node based on the loop count  
sXPath = System.String.Format("//Item[{0}]",nCount);

// Set the node to an XmlDocument  
xDoc = xpath(InXML, sXPath);  
  
// Update line total using XPath to set vales in the message  
xpath(SingleXML, "//LineTotal") = nLineTotal;</TEXTAREA>  

xpath() 함수의 첫번째 파라미터는 물론 Message 입니다. 두번째 파라미터인 xpath 문자열에서 xslt의 count() 나 string() 함수를 사용하는 것에 주목하시기 바랍니다. 다음과 같이 local-name() 함수도 사용할 수도 있습니다.

// Get currency code  
sCurrencyCode = xpath(MsgEnv, "string(\*[local-name()=Form_envelop\*[local-name()=doc_currency_code])");  
  
// Update idn  
xpath(MsgMailInfo, "\*[local-name()=Root]\*[local-name()=idn]") = sIdn;

Distinguished field와 Promoted Property에서의 데이터 접근법은 이전글을 참조하세요.


Similar Posts

Comments