1

我在 Java 中创建了一个自定义 XPath 函数,用于修改节点集中的文本节点。我需要传入一个节点集,让代码循环通过每个节点并返回一个节点集。我见过很多修改字符串的自定义 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 回答