2014-09-30 1 views
0

DocumentBuilder를 사용하여 XML 파일을 구문 분석하고 노드를 탐색 할 수 있지만 노드에 더 이상 자식이 있는지 알아 내야합니다. 예를 들어 xml :스키마를 모른 채 xml 노드를 탐색하는 방법

<MyDoc> 
<book> 
    <title> ABCD </title> 
</book> 
</MyDoc> 

node.hasChildNodes()를 사용하면 책과 제목 모두에 해당됩니다. 하지만 노드가 어떤 텍스트 값 (속성이 아님)이 title과 같은지 확인한 다음 인쇄하지 않으면 아무 것도하지 않는 것입니다. 나는 이것이 단순한 수표라는 것을 알고 있지만 나는 웹에서 그 답을 찾을 수없는 것 같다. 아마 적절한 키워드로 검색하지 않을 것입니다. 미리 감사드립니다.

답변

0

getChildNodes()를 사용해보세요. 그러면 참조하는 노드 아래의 모든 노드를 반복 할 수있는 NodeList 객체가 반환됩니다. 그들이 가질 수있는 이름과 관계없이.

0

을 호출하여 얻을 수있는 자식 노드의 유형을 확인하려면 getNodeType()을 호출해야합니다. <book>ELEMENT_NODE 유형의 하위가 있고 <title>TEXT_NODE 유형의 하위를가집니다.

0

잘 모르겠지만 중첩 된 방식에 관계없이 모든 요소를 ​​반복 할 수있는 방법이 필요하다고 생각합니다. 아래는 재귀 적으로 모든 요소를 ​​거칩니다.

public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException 
{ 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 

    Document doc = builder.parse("test.xml"); 
    NodeList childNodes = doc.getChildNodes(); 
    iterateNodes(childNodes); 
} 

private static void iterateNodes(NodeList childNodes) 
{ 
    for (int i = 0; i < childNodes.getLength(); ++i) 
    { 
     Node node = childNodes.item(i); 
     String text = node.getNodeValue(); 
     if (text != null && !text.trim().isEmpty()) { 
      System.out.println(text); 
     } 
     if (node.hasChildNodes()) { 
      iterateNodes(node.getChildNodes()); 
     } 
    } 
} 
0

텍스트 노드는 DOM에서 요소 노드 아래에 존재하며, 데이터는 항상 텍스트 노드에 저장됩니다 그런 다음 그뿐만 아니라 공백만큼의 요소 값을 인쇄합니다. 아마도 DOM 처리에서 가장 일반적인 오류는 요소 노드로 이동하여 해당 요소에 저장된 데이터가 포함될 것으로 기대하는 것입니다. 별로! 가장 간단한 요소 노드조차도 데이터를 포함하는 텍스트 노드가 있습니다.

Ref : http://docs.oracle.com/javase/tutorial/jaxp/dom/readingXML.html

관련 문제