2014-01-28 10 views
1

자바 스크립트 (Spidermonkey)의 서버 측 구현에서 웹 서비스에서 반환 된 XML 청크를 복사하고 네임 스페이스 특성을 제거하려고합니다.E4X 복사 된 XML에서 네임 스페이스 특성을 제거하십시오.

새 XML이 더 간단하고 네임 스페이스가 필요하지 않으므로 복사 된 XML에서 새 XML 구조를보다 명확하게 유지하기 위해 제거 된 네임 스페이스 참조가 있어야합니다.

setNamespace(), setNamespace (새 Namespace()), removeNamespace() 등을 시도했지만 복사 된 XML에 xmlns 특성이 나타나지 않도록 할 수 없습니다. .. 당신이 알 수 있다면 내가) (setNamespace를 호출하면

var ns = new Namespace('', 'urn://foo.com/bar'); 

var xml = <root> 
      <addrInfo> 
       <custAddr xmlns="urn://foo.com/bar"> 
       <addr>123 Main</addr> 
       <city>My Town</city> 
       <stateProv>XX</stateProv> 
       <postalCode>12345</postalCode> 
       </custAddr> 
      </addrInfo> 
     </root>; 

xml.addrInfo.ns::custAddr.setNamespace(new Namespace()); 

var newXml = xml.addrInfo.custAddr; 

console.log('namespace: ' + newXml.namespace());  

console.log(newXml); 

가, 그때 더 네임 스페이스 참조하여 custAddr 노드를 참조 할 수 있어요 그래서처럼이 역할 : 여기

은 예입니다 제거 .. 심지어 newXml 변수에 네임 스페이스()를 호출하면 빈 문자열을 생성합니다 ..하지만 내가 이해하지 못하는 것은 newXml에 custAddr에서 복사 된 XML 여전히의 xmlns는 XML의 속성이 있습니다 이유 :

namespace: 
<custAddr xmlns="urn://foo.com/bar"> 
    <addr>123 Main</addr> 
    <city>My Town</city> 
    <stateProv>XX</stateProv> 
    <postalCode>12345</postalCode> 
</custAddr> 

난 그냥 xmlns 특성과 깨끗한 custAddr 요소를 원한다.

내가 문자열 조작/정규식/etc를 할 수 있고 그런 식으로 속성을 제거 할 수 있다는 것을 알았지 만 그것을 제거하는 적절한 e4x 방법이 있다면 어떻게 알고 싶습니다.

도움을 주시면 감사하겠습니다.

답변

0

마침내 포기하고 그냥 정규식으로했습니다. 모든 E4X 구현이 기껏해야 기발한 것 같습니다.

+0

우리는 실제로 E4X를 제거했습니다. 새로운 SpiderMonkey 버전으로 이동하는 것도 고려해야합니다. https://developer.mozilla.org/en-US/docs/SpiderMonkey/24 – evilpie