2015-01-16 2 views
1

Я создаю пользовательскую функцию XPath в Java, которая изменяет текстовые узлы в наборе узлов. Мне нужно пройти в наборе узлов, запрограммировать цикл через каждый узел и вернуть набор узлов. Я видел много примеров пользовательских функций XPath, которые изменяют строки, но ни один из них не принимает в наборе узлов и не возвращает узел успешно. Я также не знаю, как сопоставить возвращаемый набор узлов.Создание пользовательской функции XPath для изменения набора узлов в Java

Возьмите этот источник 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> 

Самое главное здесь в том, что я хочу, чтобы это реализовать в виде функции пользовательского XPath с использованием Java, так что он может быть перетащить и упал в режиме конструктора. И я использую File Adapter с каждой стороны этого преобразования, поэтому структура всех узлов уже задана, и мне нужно внести свои результаты.

ответ

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); 
Смежные вопросы