XPath 1.0 및 JavaCompute 노드를 사용하여 메시지에서 정보 추출

XPath는 XML 문서를 사용하도록 설계된 조회 언어이지만 조회 목적으로 트리 구조에 적용할 수 있습니다. WebSphere Message Broker는 XPath를 사용하여 비트 스트림 형식에 관계없이 논리 메시지 트리에서 요소를 선택합니다. XPath 및 XPath 1.0 표준의 W3C 정의에 대한 자세한 정보는 XPath를 참조하십시오. 이 주제에서 사용되는 용어는 XPath 1.0의 W3C 정의에 사용된 용어를 기초로 합니다.

이 주제는 다음 정보를 포함합니다.

evaluateXPath 메소드를 사용하여 메시지 정보 추출

evaluateXPath() 메소드는 Java 사용자 정의 노드 API에 포함되며 다음 예외가 있는 XPath 1.0을 지원합니다.
  • 네임스페이스 축 및 네임스페이스 노드 유형. 네임스페이스 축은 특정 요소의 실제 XML 네임스페이스 선언 노드를 리턴합니다. 이로 인해 XPath 표현식에서 URI 선언이나 XML 접두부를 조작할 수 있습니다. 이 축은 XML이 아닌 비트 스트림에 설정된 비어있는 노드를 리턴합니다.
  • id() 함수를 사용할 경우에는 MbRecoverableException을 전달합니다.

evaluateXPath() 메소드는 MbMessage 오브젝트(절대 경로의 경우)나 MbElement 오브젝트(상대 경로의 경우)에서 호출됩니다. XPath 표현식은 문자열 매개변수로 메소드에 전달됩니다. MbXPath 오브젝트를 취하는 이 메소드의 두 번째 양식이 제공됩니다. 이 오브젝트는 변수 바인딩 및 네임스페이스 맵핑(필요할 경우)과 함께 XPath 표현식을 캡슐화합니다.

evaluateXPath() 메소드는 표현식 리턴 유형에 따라 네 가지 유형 중 하나의 오브젝트를 리턴합니다.
  • java.lang.Boolean: XPath Boolean 유형 표시
  • java.lang.Double: XPath 숫자 유형 표시
  • java.lang.String: XPath 문자열 유형 표시
  • java.util.List: XPath 노드 세트 표시. 목록 인터페이스는 순서화된 일련의 오브젝트(이 경우 MbElement)를 표시합니다. 이 인터페이스를 사용하여 요소에 직접 액세스하거나 반복기 또는 MbElement 배열을 가져올 수 있습니다.

XPath 변수 바인딩

XPath 1.0은 평가 이전에 지정된 표현식 내에서 변수를 참조할 수 있도록 지원합니다. MbXPath 클래스에는 이 변수 바인딩을 사용자 Java 코드에 지정하고 Java 코드에서 제거하기 위한 세 가지의 메소드가 있습니다. 값은 네 가지의 XPath 1.0 지원 유형 중 하나여야 합니다.
  • Boolean
  • 노드 세트
  • 숫자
  • 문자열

XPath 네임스페이스 지원

XML 메시지의 경우, 네임스페이스는 다음 예에 표시된 것처럼 약어로 된 네임스페이스 접두부에서 전체 네임스페이스 URI로의 맵핑을 사용하여 참조됩니다.
<ns1:aaa xmlns:ns1='http://mydomain.com/namespace1'
         xmlns:ns2='http://mydomain.com/namespace2'>
  <ns2:aaa>
    <ns1:bbb/>
  </ns2:aaa>
</ns1:aaa>

네임스페이스 접두부는 네임스페이스를 표시하는 데 편리하지만 해당 맵핑을 정의하는 문서에서만 의미가 있습니다. 전역 의미를 정의하는 것은 네임스페이스 URI입니다. 또한 네임스페이스 접두부 개념은 메시지 플로우에서 생성되는 문서에는 의미가 없습니다. 네임스페이스 URI는 정의된 xmlns 맵핑 없이 구문 요소에 지정할 수 있기 때문입니다.

이와 같은 이유로 XMLNS(C) 및 MRM 구문 분석기는 네임스페이스 URI만 브로커와 사용자 코드(ESQL 또는 플러그인 코드)에 노출합니다. ESQL에서는 사용자가 자신의 고유 맵핑을 설정하여 잠재된 긴 URI의 약어를 작성할 수 있습니다. 이 맵핑은 어떤 방식으로든지 XML 문서에 정의된 접두부에 관련되지 않습니다(이름이 같아도).

XPath 프로세서에서는 평가 시 확장된 URI에 네임스페이스 약어를 맵핑할 수 있습니다. MbXPath 클래스에는 이와 같은 네임스페이스 맵핑을 지정하고 제거할 메소드가 있습니다. XML 예는 다음 코드를 사용하여 처리할 수 있습니다.
  MbMessage msg = assembly.getMessage();
List chapters= (List)msg.evaluateXPath("/document/chapter");
// this returns a list of all chapters in the document (length 1)

MbElement chapter = (MbElement)chapters.get(0);  // the first one

// values can also be extracted directly using XPath
String title = (String)msg.evaluateXPath("string(/document/chapter/@title)");

String chapterText = (String)msg.evaluateXPath("string(/document/chapter/text())");

XPath 확장을 사용하여 메시지 갱신

XPath의 WebSphere Message Broker 구현은 메시지 트리를 수정하기 위한 다음과 같은 임시 함수를 제공합니다.
set-local-name(object)
컨텍스트 노드의 확장 이름 중 로컬 부분을 인수에 지정된 값으로 설정합니다. object는 올바른 어떤 표현식도 가능하면 문자열 함수에 대한 호출을 사용한 것처럼 문자열로 변환됩니다.
set-namespace-uri(object)
컨텍스트 노드의 확장 이름 중 네임스페이스 URI 부분을 인수에 지정된 값으로 설정합니다. object는 올바른 어떤 표현식도 가능하면 문자열 함수에 대한 호출을 사용한 것처럼 문자열로 변환됩니다.
set-value(object)
컨텍스트 노드의 문자열 값을 인수에 지정된 값으로 설정합니다. object는 올바른 어떤 표현식도 가능하면 문자열 함수에 대한 호출을 사용한 것처럼 문자열로 변환됩니다.
구문 요소 트리를 빌드하고 수정할 수 있도록, XPath 1.0 스펙에 정의된 13 외에 다음 축을 사용할 수 있습니다.
select-or-create::name 또는 ?name
?name은 select-or-create::name과 같습니다. name이 @name이면 속성이 작성되거나 선택됩니다. 지정된 nametest와 일치하는 하위 노드를 선택하거나 다음 규칙에 따라 새 노드를 작성합니다.
  • ?namename이라고 하는 하위 요소(있는 경우)를 선택합니다. name이라고 하는 하위 요소가 없으면 ?namename을 마지막 하위 요소로 작성하여 선택합니다.
  • ?$namename을 마지막 하위 요소로 작성한 후 선택합니다.
  • ?^namename을 첫 번째 하위 요소로 작성한 후 선택합니다.
  • ?>namename을 다음 동위 요소로 작성한 후 선택합니다.
  • ?<namename을 이전 동위 요소로 작성한 후 선택합니다.
관련 정보
Java 사용자 정의 노드 API
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac30390_