2016-08-26 8 views
0

私はNodeListをコンパイルする必要があるため、NodeListを生成して結果を処理するためにxpathを使用するため、NodeListを使用する必要があります。nodeSetの代わりに使用するもの

私のコードは

NodeSet nodes = new NodeSet(); 

NodeList children = mainElement.getChildNodes(); 
for(int i=0;i<children.getLength();i++){ 
    Node child = children.item(i); 
    if(nodeName==null || child.getNodeName().equals(nodeName)){ 
     if(attName==null){ 
      //if not att name then all nodes 
      nodes.addNode(child); 
     } 
    } 
} 

である私は自分のクラスを書くことができますが、私はすでに、この目的のために利用可能なものがあるだろうと思ったでしょうか?

注記コメントに理由を記入しておきたい場合は、今後修正することができます。

IntStream.range(0, children.getLength()) 
    .map(children::item) 
    .filter(child -> child.getNodeName().equals(nodeName)) 
    .collect(Collectors.toList()); 

私は理由を推測するこの種のものを行うためのフレームワークの方法が考えていないためトラバーサルは、各消費者がしたいことをされています。あなただけのJava 8でこれを行う場合

+0

私はそれをどうすればいいのですか?NodeListを返す必要があるだけですが、NodeSetはいつでも削除できるようにマークされているため、頼りにすべきではありません。 私はそれがxpath経由で可能であると信じていますが、現在のxpathをノードから取得し、xpathを使ってその下を検索する方法を理解できません。 – f1wade

答えて

0

XPathを使用して結果を構築することもできます。 あなたのコードは、「ノードの直接の子である名前nodeNameのすべてのノード」を取得します。

これはmainElementのコンテキストで評価される場合、nodeName XPath式に変換されます。これは簡単に行うことができます:

XPath nodeNameXPath = XPathFactory.newInstance().newXPath().compile(nodeName) 
NodeList result = (NodeList) nodeNameXPath.eval(mainElement, XPathConstants.NODESET) 

これはそれを行う必要があります。

0

おそらく、人生は良いですdoは根本的に異なるかもしれません。

+0

私はJava 7を使用しているので、今は役に立たないが、これはNodeListを返すのだろうか? 私が本当に望むのは、NodeSetの代わりにNodeSetを使用してNodeListを取得するオブジェクトです – f1wade

関連する問題