2010-11-26 2 views
1

나는 내가 C를 얻기 위해 노력하고있어 다음과 같은 코드가 있습니다 불행히도 그것은 하늘의 배열을 반환하는 것자바 스크립트 XML 파서 : ":"이 노드하는 방법에 이름을

value = '<?xml version="1.0" encoding="UTF-8"?><content><c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate></content>'; 

xml = (new DOMParser()).parseFromString(value, 'text/xml'); 

console.log(xml.getElementsByTagName('c:CreationDate')); 

:에서 CreationDate 노드를 , XML에있는 노드가있는 배열 대신. 나는 이것이 ":"기호 때문에 발생했다고 생각한다.

탈출 할 방법이 있습니까?

참고 : childNodes 또는 이와 유사한 용도로 사용하지 마십시오. 내 XML이 복잡하고 (아마도 샘플 일 뿐이다) 장래에 변경 될 가능성이 높고 태그 이름에만 의존 할 수 있기 때문에이 기능이 작동하지 않습니다.

감사합니다.

답변

10

cc:CreationDate이며 접두사는 XML namespace입니다. 네임 스페이스 접두사는 네임 스페이스의 바로 가기입니다. 네임 스페이스는 xmlns:c 특성을 가진 문서의 어딘가에 정의되어야합니다. 그러나 문서에서 네임 스페이스 정의가 누락되었습니다. 이 예에서

var value = '<?xml version="1.0" encoding="UTF-8"?>' + 
      '<content>' + 
      ' <c:CreationDate xmlns:c="http://my.namespace">2010-09-04T05:04:53Z</c:CreationDate>' + 
      '</content>'; 

또는

var value = '<?xml version="1.0" encoding="UTF-8"?>' + 
      '<content xmlns:c="http://my.namespace">' + 
      ' <c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate>' + 
      '</content>'; 

이 접두사 c이 네임 스페이스 http://my.namespace에 할당 : 같은

는 그래서 보일 것입니다. CreationDate 태그의 접두어는 c이므로 http://my.namespace 네임 스페이스에 속합니다.

그런 다음에서 CreationDate 요소에 대해 조회 할 이름 공간을 인식 getElementsByTagNameNS() 기능을 사용할 수 있습니다 :

console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate')); 

당신이 진짜 네임 스페이스 이름이 아닌 접두사를 통과해야 첫 번째 매개 변수로.