2013-03-21 2 views
0

루트 노드의 네임 스페이스를 변경하고 네임 스페이스 접두어를 자식 요소가 아닌 루트 요소에만 추가해야합니다.네임 스페이스 접두사 추가 루트 노드

나는 XML 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<Class xmlns="https://api.ladbrokes.com/v1/sportsbook-couchbase/SportsbookCouchbase.xsd"> 
<blurb >Test</blurb> 
<channels > 
<e >I</e> 
<e >J</e> 
<e >K</e> 
</channels> 
<classSortCode >Test</classSortCode> 
<classStatus >Test</classStatus> 
<creationDateTime >2013-03-21T22:29:01.58+05:30</creationDateTime> 
<isActive >true</isActive> 
<lastUpdatedDateTime >2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
<locale >Test</locale> 
</Class> 

을 그리고 난이

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
<blurb >Test</blurb> 
<channels > 
<e >I</e> 
<e >J</e> 
<e >K</e> 
</channels> 
<classSortCode >Test</classSortCode> 
<classStatus >Test</classStatus> 
<creationDateTime >2013-03-21T22:29:01.58+05:30</creationDateTime> 
<isActive >true</isActive> 
<lastUpdatedDateTime >2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
<locale >Test</locale> 
</ns0:Class> 

내가이 사용 XSLT를 달성 할 수 될 필요? 이 점에 대해 친절히 도와주십시오.

감사합니다, 시바

+0

을, 자식 요소는'NULL' 네임 스페이스에'... SportsbookCouchbase.xsd' 네임 스페이스에있는에서 변경되었습니다. 그게 의도적 인거야? – JLRishe

+0

네, 의도적이었습니다. –

답변

1

문서 요소를 다른 네임 스페이스를 제공하고 널 네임 스페이스에 다른 모든 요소를 ​​이동할 수있는 방법이 있습니다 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*"> 
    <xsl:element name="ns0:{local-name()}"> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="*/*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

샘플 입력에서 실행 결과는 다음과 같습니다.

<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <blurb>Test</blurb> 
    <channels> 
    <e>I</e> 
    <e>J</e> 
    <e>K</e> 
    </channels> 
    <classSortCode>Test</classSortCode> 
    <classStatus>Test</classStatus> 
    <creationDateTime>2013-03-21T22:29:01.58+05:30</creationDateTime> 
    <isActive>true</isActive> 
    <lastUpdatedDateTime>2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
    <locale>Test</locale> 
</ns0:Class> 

설명의 편의를 위해 문서 요소의 네임 스페이스를 변경하는 방법은 무엇입니까? e를 이미 가지고있는 네임 스페이스에 저장합니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*"> 
    <xsl:element name="ns0:{local-name()}"> 
     <xsl:copy-of select="namespace::*" /> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

그리고 그 결과입니다. 상단에있는 네임 스페이스 선언에서 작지만 중요한 차이 참고 : 예에서

<ns0:Class xmlns:ns0="https://api.ladbrokes.com/v1/sportsbook-couchbase/Temp.xsd" 
    xmlns="https://api.ladbrokes.com/v1/sportsbook-couchbase/SportsbookCouchbase.xsd"> 
    <blurb>Test</blurb> 
    <channels> 
    <e>I</e> 
    <e>J</e> 
    <e>K</e> 
    </channels> 
    <classSortCode>Test</classSortCode> 
    <classStatus>Test</classStatus> 
    <creationDateTime>2013-03-21T22:29:01.58+05:30</creationDateTime> 
    <isActive>true</isActive> 
    <lastUpdatedDateTime>2013-03-21T22:29:01.58+05:30</lastUpdatedDateTime> 
    <locale>Test</locale> 
</ns0:Class> 
+0

고마워요, 나는 나를 위해 일했습니다. –

관련 문제