2015-01-16 10 views
1

Java에서 노드 집합의 텍스트 노드를 수정하는 사용자 지정 XPath 함수를 만듭니다. 노드 집합을 전달하고 모든 노드를 통해 코드 루프를 작성한 다음 노드 집합을 반환해야합니다. 문자열을 수정하는 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> 

여기에 가장 큰 것은

는 나는 그것이 디자이너 모드에서 드래그 앤 드롭 할 수 있도록 자바를 사용하여 사용자 정의의 XPath 함수로이를 구현하려는 것입니다. 그리고이 변환의 양쪽에 파일 어댑터를 사용하고 있으므로 모든 노드의 구조가 이미 주어져 있고 결과가 적합하게 만들어야합니다.

답변

0

NodeList의 고유 한 구현을 만들어야합니다. 내가 사용하는 어떤 식으로 뭔가 :

ArrayList<Node> nodes = ... logic to gather the nodes you want to return 
return new NodeArray(nodes); 
:

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 코드는 다음과 같이 할 것이다