2016-08-26 4 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()); 

나는 이유를 추측 이런 종류의 일을위한 프레임 워크의 방법이 될 수 없습니다에 대한 순회는 각 소비자가 원하는 것이있다 : 당신은 그냥 자바 8에서이 작업을 수행하는 경우

+0

내가 어떻게하는지와 함께 나는 NodeList를 반환 할 필요가 있지만, NodeSet은 언제든지 제거 될 수있는 것으로 표시되어 있으므로 의존하면 안된다. 나는 그것이 xpath를 통해 가능하다고 믿지만, 노드에서 현재 xpath를 얻는 방법을 알아낼 수 없다. xpath를 사용하여 그 아래에서 검색한다. – f1wade

답변

0

실제로 XPath를 사용하여 결과를 만들 수도 있습니다. 여러분의 코드는 "mainElement 노드의 직접적인 자식 인 이름이 nodeName 인 모든 노드"를 가져옵니다.

이는 mainElement의 컨텍스트에서 평가되는 경우 nodeName XPath 식으로 변환됩니다. 어떤 작업을 수행 할 수있을만큼 간단합니다 :

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

이 작업을 수행해야합니다.

0

아마도 수명이 더 낫다 do는 근본적으로 다를 수 있습니다.

+0

메신저 자바 7을 사용하므로 지금은 도움이되지 않지만 NodeList를 반환합니까? NodeList 대신 NodeSet 대신 사용할 객체가 정말로 필요합니다. – f1wade

관련 문제