実録、ともおじちゃん

典型的な客先常駐型ソフトウェア技術者の13年の軌跡

Android: jaxen

2009年04月08日 | コンピュータ・家電
WebViewで表示中のページを解析して文書木が得られたら、もちろん、特定ノードを取り出したくなります。だからといって、DOM APIを使って地道に探索するのはメンドウ。やっぱりXPathでズバッと選択したいところ。

残念ながらAndroidにはXPath式を扱うAPIが見つかりません。ただ、XPath式を処理するためだけにXalanはちょっと重い気がしたので、いろいろなオブジェクトモデルをサポートするjaxenを試してみました。

jaxenDOMをサポートしているし、AndroidもAPIを提供しているので、すんなり呼び出せるだろうと高をくくっていたのですが…


なぜじゃ。Androidが提供していないAPIを使おうとして例外が出るならともかく、IndexOutOfBoundsExceptionなんて。それも、Node.getNextSibling()で…

いろいろ調べてみたところ、


なんて見つけました。あーあぁ。やむを得ず、jaxenのDocumentNavigator.javaの斜体字部分を修正。

906    public Object next ()
907    {
908      if (node == null) throw new NoSuchElementException();
909      Node ret = node;
910      node = getNextNode(node);

        try {
          node = getNextNode(node);
        } catch (IndexOutOfBoundsException e) {
          node = null;
        }

911      while (!isXPathNode(node)) {
912        node = getNextNode(node);
913      }
914      return ret;
915    }

ついでに、 XOMdom4jJDOMのサポートを切り捨ててビルドし、再度、サンプルを実行したら、ようやく期待通り指定ノードを取り出すことができました。

最新の画像もっと見る