2014-04-10 9 views
0

Oracle Service Bus 10gR3에서 XSLT 변환을 실행하면 출력 XML이 표준 XSLT 프로세서를 사용하여 나타나는 방식과 다르게 나타납니다.OSB에서 네임 스페이스 수정을위한 XSLT - 네임 스페이스 접두어가 이상 함

입력 XML :

<given xmlns="http://www.sample.co.uk/version/6"> 
    <child>content here</child> 
</given> 

XSLT :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="*" > 
    <xsl:element name="{local-name()}" namespace="{concat(substring-before(namespace-uri(), '/6'),'/7')}" > 
     <xsl:apply-templates /> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

출력 XML : 당신이 볼 수 있듯이

<ns1537:given xmlns:ns1537="http://www.sample.co.uk/version/7"> 
    <ns1538:child xmlns:ns1538="http://www.sample.co.uk/version/7">content here</ns1538:child> 
</ns1537:given> 

는 각 노드가 다른 증분 접두사를 할당되고있다? 또한 네임 스페이스 속성이 각기 다른 노드에 포함되어 있습니까? 출력 XML은 다음과 같을 것입니다 :

<given xmlns="http://www.sample.co.uk/version/7"> 
    <child>content here</child> 
</given> 

왜 OSB의 XSLT 프로세서가 표시된대로 출력을 생성하는지 설명 할 수 있습니까? 네임 스페이스 접두어 등을 사용하여 예상되는 출력을 얻으려면 어떻게해야합니까?

미리 감사드립니다. PM.

+1

여기 내 생각에 접두사 자체가 번역과 독립적이지 않습니까? 지저분하지만 OSB는 수백 또는 수천 개의 다른 서비스에 대한 프록시 서비스이므로 OSB의 여러 구성 요소에서 XSLT를 혼합하고 일치 시키면 일부 네임 스페이스 접두어가없는 경우 조금 걱정하지 않겠습니까? 혼란을 막기 위해? –

+0

안녕하세요 @ 닉 클 라우 어, 귀하의 의견에 감사드립니다. OSB의 xsl 프로세서가 메시지의 각 노드에 대해 다른 네임 스페이스 접두어를 생성하는 방식이 모든 노드가 동일한 네임 스페이스에 속한다고 생각하면 조금 이상합니다. 그럼에도 불구하고 아무런 문제도 발생하지 않지만 그럼에도 불구하고 조금 이상한 것으로 판명되었습니다. 다시 한 번 감사드립니다. –

답변

2

네임 스페이스 접두사를 정의하는지 여부와 어떤 차이가 있습니다. 요소가 적절한 네임 스페이스로 한정되는 한. 또한 네임 스페이스 접두어는 인간이 XML을 쉽게 읽을 수 있도록 해줍니다. OSB에서 만든 XML에는 아무런 문제가 없으므로 접두사를 제거 할 수있는 방법이 없습니다. 이 내용은 Namespaces in XML 1.1이어야합니다.

+0

안녕하세요 @ 팔팔 마스, 귀하의 의견에 감사드립니다. 당신은 아무런 차이가 없으며, 실제로 문제를 일으키지 않는다는 점에서 옳습니다. 그러나 OSB의 프로세서가 모든 노드가 동일한 네임 스페이스에 속할 때 변환 된 XML의 각 노드에 다른 프리픽스를 생성한다는 것은 이상한 일입니다. 그리고 여러분은 이러한 접두어를 제거 할 수 없다는 점에서도 옳습니다. 이를 위해 나는 귀하의 답변을 그대로 받아들입니다. 다시 한 번 감사드립니다. –

+0

감사합니다. :) – plkmthr