2012-09-17 3 views
0

나는 여러 클라이언트 유형에 대해 XML 피드를 제공하는 웹 서비스를 사용하고 있으며 클라이언트는 다양한 유형의 장치에서 XML을 사용합니다. XML에는 몇 가지 네임 스페이스가 있습니다. 그러나 우리 고객 중 한 명은 그들의 한계가 있기 때문에 네임 스페이스를 감지 할 수 없습니다. 그러나 나는 그에게도 새로운 XML을 제공 할 수는 없다. 저를 사용하지 않고 네임 스페이스의 요구를 충족시킬 수 있도록 제게 제안 해주세요. 그래서 모든 XML이 내 XML을 사용할 수 있도록 변경할 수 있습니다.xml의 네임 스페이스 대신 사용할 수

미리 감사드립니다.

+1

C 프로그래머가'http_get()'과'http_post()'와 같은 함수 이름 접두사를 가진 네임 스페이스를 에뮬레이트하는 것과 비슷합니다.'http :: get()'과'http :: post())'를 사용하면 XML을 ''대신에 ''과 같이 출력 할 수 있습니다. –

+0

Thnx @ benhoyt. 간단히 문자열 대체 메커니즘을 적용하여 모든':'기호를'_'으로 대체했습니다. 이제 클라이언트 측에서 구문 분석 할 수있게되었습니다. – mridul4c

답변

0

: 기호를 모두 _으로 바꾸는 문자열 대체 메커니즘을 적용 했으므로 지금 클라이언트 측에서 지금 구문 분석 할 수 있습니다.

+1

흥미 롭습니다 - 전체 XML 문서에서':'의 문자열을'_'로 바꾸고 있습니까? 물론 매우 위험합니다. 왜냐하면 속성과 텍스트 내용에 콜론이있을 수 있기 때문입니다. 아마도 태그 이름 만 바꾸는 방법이있을 것입니다. –

+0

원본 XML 출력을 완벽하게 제어 할 수 있다면 간단한 문자열 교체가 자신의 상황에서 작동 할 수 있습니다. 즉,이 단순한 접근 방식은 궁극적으로 깨지기 쉬운 것으로 판명 될 수 있습니다. – DavidRR

1

네임 스페이스를 제거한 스타일 시트 (XSLT/xsltproc)를 사용하여 네임 스페이스가 포함 된 XML 형식을 다른 것으로 자동 변환 할 수 있습니다. 이 경우 스타일 시트는 매우 간단하고 (몇 줄만) 유지 보수가 쉽습니다. 결과 문서는 사본 인으로 네임 스페이스가 없으므로 기본적으로 동일하게 유지됩니다.

+0

하나 이상의 네임 스페이스가있을 수 있음을 지적하고 싶습니다. – DavidRR

+0

나는 그가 영구적 인 해결책보다는 결정 론적 인 해킹을 찾고 있다고 생각하지만, 당신은 절대적으로 맞습니다. 네임 스페이스는 XML의 핵심이며 다른 마크 업을 가능하게하며 또한 병렬로 사용된다는 것을 의미합니다. – count0

2
But one of our clients can't detect namespaces because of some limitation at their end. 

한계를 극복하기 전에 많은 노력을 기울일 필요가 있습니다. 네임 스페이스 인식 XML 파서는 꽤 유비쿼터스 적이기 때문에 작업하는 매우 이상한 환경이어야하며 아마도 네임 스페이스를 처리 할 수있는 유일한 제약 조건이 아닙니다.