2014-06-13 2 views
1

XML 노드 값을 검색하려고 할 때 문제가 있습니다. 약간의 설명없이이 질문을하는 것은 어려울 것입니다. 내가 만든 Server - Client Chatroom이 있고 Server는 사용자의 사용자 이름이 들어있는 모든 XML 데이터를 처리합니다. 예를 들어 사용자는 서버의 모든 사용자에게 브로드 캐스팅 될 메시지를 보냅니다. 메시지가 서버에 도착하면 서버는 사용자의 현재 IP 주소를 기반으로 배열을 검사합니다. IP가 배열에 있으면 대응하는 숫자를 가진 또 다른 배열은 모든 chatroom 사용자에게 브로드 캐스팅되는 사용자 이름을 반환합니다. 새 사용자 또는 오프라인 사용자가 서버에 참여할 때 문제가 발생합니다. IP가 배열에없는 경우 서버는 온라인 또는 이전 사용자가 마지막으로 알고있는 모든 IP가있는 XML 파일을 검사합니다 (이 부분은 새 IP가있는 이전 사용자를 위해 해결됩니다). 그러면 서버가 정렬. 이것은 이론적으로는 작동하지만 코드에서는 동일한 결과를 산출하지 않습니다. 배열에 현재 IP를 추가 할 수 있지만 사용자 이름을 가져올 수 없습니다. 그리고 그것은 사용자의 이전 IP가 노드 이름이고 사용자 이름이 노드 값이라는 사실 때문이라고 생각합니다. 예를 들어 :XML 파일에서 노드 값을 올바르게 읽으려면 어떻게해야합니까?

public static void addInArray(String IPtoCheck) throws Exception{ 
     File fXmlFile = new File("Usernames.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     doc.getDocumentElement().normalize(); 
     NodeList nList = doc.getElementsByTagName(IPtoCheck); 
     for(int i=0; nList.getLength()>i; i++){ 
      Node nNode = nList.item(i); 
      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
       Element eElement = (Element) nNode; 
       if(eElement.getNodeName().equals(IPtoCheck)){ 
        int used = 0; 
        while (used < 63){ 
         if(IPs[used].equals("no")){ 
          IPs[used] = IPtoCheck; 
          usernames[used] = eElement.getNodeValue(); 
          AppendArea.Apen(3, usernames[used]); 
          break; 
         } 
         used++; 
        } 
       } 
      } 
     } 
    } 

이 또한 내가

Arrays.fill(IPs, "no"); 
Arrays.fill(usernames, "no"); 

더가 나타내는 사용 않았 음을 추가해야합니다 : 이

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Server> 
    <i0000>User</i0000> 
    <i1921681114>Chappy</i1921681114> 
</Server> 

배열에 추가해야하는 기능을 파일 Usernames.xml 오픈 어레이 스팟

또한 IPtoCheck String i 수정 된 IP 값. XML에서 예를 들어 파일의 IP 노드는 다음과 같습니다

i1921681114 

이 실제로 192.168.1.114

이 모든 긴 설명 후 제 질문은 다음과 같습니다

를 내가 제대로 읽기 어떻게 자바를 사용하는 XML 파일의 노드 값?

eElement.getNodeValue();

답변

2

org.w3c.dom.Element 객체에는 절대로 null 값이 없으므로 항상 null을 반환합니다.

자녀를 받아야합니다. 다음을 사용하는 경우 :

eElement.getFirstChild().getNodeValue(); 

원하는 텍스트 노드 인 첫 번째 하위 노드를 검색합니다.

또한 사용할 수 있습니다

이 경우, 같은 결과를 가지고, 요소의 텍스트 내용을 반환
eElement.getFirstChild().getTextContent(); 

.

Java에서 직관적이지 않은 DOM API를 발견하면 JDOM 또는 DOM4J와 같은 다른 API를 사용하거나 XPath와 같은 다른 J2SE 표준 메소드를 사용할 수 있습니다.

+0

내 질문에 답변 해 주셔서 감사합니다. 그러나 나는 XML에 동일한 값을 가진 애트리뷰트를 추가하고 .getAttribute를 호출했다. 어쨌든 고마워! –

+0

애트리뷰트는 자식이 없기 때문에 다르게 작동합니다. 요소의 * 노드 값 *이라고하는 속성은 하위 요소에 따라 다릅니다. 다른 API (또는 구현)는이를 문자열 값으로 평가하여 기본적으로 요소에 할당 할 수 있습니다. – helderdarocha

관련 문제