一年多前写了 JXPath -ObjectXPathNavigator ,当时想当然地以为 ObjectXPathNavigator 已经达到了 JXPath 那样的对对象的支持程度。直到最近要用到这种功能的时候才发现ObjectXPathNavigator 差得相当的远呢。
ObjectXPathNavigator 是建立在 XPathNavigator 基础上的。XPathNavigator本身是个挺酷的东西,它提供了 DOM, SAX, Pull (Reader) 以外的另外一种 XML (只读和随机的) 处理方式。是对 XSLT 引擎与数据源之间的一个抽象层。
XSLT 引擎 - XPathNavigator - 数据源
XSLT 引擎 - XPathDocument - XML
TheServerSide.NET- .NET Custom XPathNavigator/XmlReader ... 用扩充 XPathNavigator的办法来实现用 XPath 语法来检索:文件系统、注册表、.NET 可执行文件 Code DOM。
ObjectXPathNavigator 是试图扩充 XPathNavigator 到对象容器上,例如 ArrayList,以便用 XPath 语法来检索对象。
美好的设想,可是目前 XPathNavigator 似乎主要是字符串处理,而没有对象的支持。XPathNavigator.Value 属性只能返回 string。
因此想要得到 JXPath 那样的对象是不可能的了。
Address address = (Address) JXPathContext.newContext(vendor).getValue("locations[address/zipCode='90210']/address");
这里, JXPath 中JXPathContext.getCurrent 返回的是对象。
ObjectXPathNavigator 只能检索一层对象容器,而不能检索嵌套对象。这是非常遗憾的。