XPath 是专门用于处理 XML 文档的查询语言,但它也可以应用于任何树结构进行查询。不管位流是什么格式,WebSphere Message Broker 都使用 XPath 从逻辑消息树中选择元素。关于 XPath 1.0 标准的 XPath 和 W3C 定义的更多信息,请参阅 XPath。本主题中使用的术语基于 XPath 1.0 的 W3C 定义中使用的术语。
evaluateXPath() 方法可以在 MbMessage 对象(对于绝对路径)上调用,或者在 MbElement 对象(对于相对路径)上调用。XPath 表达式作为字符串参数传递给方法。提供了该方法的第二种形式,它采用 MbXPath 对象。如果需要,该对象将 XPath 表达式与变量绑定和名称空间映射封装在一起。
<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 或插件代码)的名称空间 URI。ESQL 允许用户设置他们自己的映射,以创建这些可能会很长的 URI 的缩写。这些映射在任何情况下都与在 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())");