1

ノード セット内のテキスト ノードを変更するカスタム XPath 関数を Java で作成しています。ノード セットを渡し、コードをすべてのノードにループさせ、ノード セットを返す必要があります。文字列を変更するカスタム XPath 関数の例を数多く見てきましたが、ノード セットを取り込んでノード セットを正常に返す例はありません。また、返されるノードセットをマップする方法もわかりません。

たとえば、このソース XML を取り上げます。

<Library>
    <Bookshelf>
        <Book>alice in wonderland</Book>
        <Book>the giving tree</Book>
            <Author>shel silverstein</Author>
    </Bookshelf>
</Library>

次に、これをターゲット XML にしたいと考えています。各単語の最初の文字を大文字にすることにしましたが、これは単なる例です。テキストの変更部分については心配しないでください。

<Library>
    <Bookshelf>
        <Book>Alice In Wonderland</Book>
        <Book>The Giving Tree</Book>
            <Author>Shel Silverstein</Author>
    </Bookshelf>
</Library>

ここで最も重要なことは、これを Java を使用してカスタム XPath 関数として実装し、デザイナー モードでドラッグ アンド ドロップできるようにすることです。そして、この変換の両側でファイル アダプターを使用しているため、すべてのノードの構造は既に与えられており、結果を適合させる必要があります。

4

1 に答える 1

0

NodeList の独自の実装を作成する必要があります。私が使用しているもののようなもの:

package org.gramar.model;

import java.util.List;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class NodeArray implements NodeList {

    private Node nodes[];

    public NodeArray(Node[] nodes) {
        this.nodes = nodes;
    }

    public NodeArray(List<Node> nodes) {
        this.nodes = new Node[nodes.size()];
        nodes.toArray(this.nodes);
    }

    @Override
    public Node item(int index) {
        return nodes[index];
    }

    @Override
    public int getLength() {
        return nodes.length;
    }

}

XPathFunction コードは次のようになります。

ArrayList<Node> nodes = ... logic to gather the nodes you want to return
return new NodeArray(nodes);
于 2015-09-05T13:39:44.217 に答える