2017-05-03 9 views
0

출력에 common : 네임 스페이스의 네임 스페이스를 채우는 것을 피하는 방법이 있습니까? 그리고이 네임 스페이스는 기본 네임 스페이스로 바뀌어야합니다. XML에서 접두사와 NS2해야 접두어가없는 요소 : 접두사를 나는 일반적인를 제거해야,XSLT를 사용하여 출력에서 ​​접두사 네임 스페이스를 제거해야합니다.

<IntraConsignment xmlns="http://www.minfin.fgov.be/IntraConsignment" xmlns:common="http://www.minfin.fgov.be/InputCommon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.minfin.fgov.be/IntraConsignment NewICO-in_v0_7.xsd" IntraListingsNbr="1"> 
<Representative> 
    <common:RepresentativeID identificationType="NVAT" issuedBy="BE">9876941603</common:RepresentativeID> 
</Representative> 
<IntraListing SequenceNumber="1" ClientsNbr="1" AmountSum="1000.00"> 
    <Declarant> 
     <common:VATNumber>9876941603</common:VATNumber> 
    </Declarant> 
    <Period> 
     <Month>07</Month> 
    </Period> 
    <IntraClient SequenceNumber="1"> 
     <CompanyVATNumber issuedBy="DE">123456</CompanyVATNumber> 
    </IntraClient> 
</IntraListing> 
</IntraConsignment> 

그리고 :

INPUT :이 샘플 파일이 있습니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.minfin.fgov.be/IntraConsignment" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://www.minfin.fgov.be/InputCommon" xmlns="http://www.minfin.fgov.be/InputCommon" exclude-result-prefixes="xs xsi xsl common"> 
<xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="common:*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:element> 
</xsl:template> 
<xsl:template match="*"> 
    <xsl:element name="ns2:{local-name()}"> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

내 XSLT는 매우 노력하고 있지만 의 xmlns가 = "http://www.minfin.fgov.be/InputCommon" 출력에 표시되지 않은 네임 스페이스 :

나는이 스타일 시트가 있습니다.

생성 된 출력 : 예상 된

<ns2:IntraConsignment xmlns:ns2="http://www.minfin.fgov.be/IntraConsignment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.minfin.fgov.be/IntraConsignment NewICO-in_v0_7.xsd" IntraListingsNbr="1"> 
<ns2:Representative> 
    <RepresentativeID xmlns="http://www.minfin.fgov.be/InputCommon" identificationType="NVAT" issuedBy="BE">9876941603</RepresentativeID> 
</ns2:Representative> 
<ns2:IntraListing SequenceNumber="1" ClientsNbr="1" AmountSum="1000.00"> 
    <ns2:Declarant> 
     <VATNumber xmlns="http://www.minfin.fgov.be/InputCommon">9876941603</VATNumber> 
    </ns2:Declarant> 
    <ns2:Period> 
     <ns2:Month>07</ns2:Month> 
    </ns2:Period> 
    <ns2:IntraClient SequenceNumber="1"> 
     <ns2:CompanyVATNumber issuedBy="DE">123456</ns2:CompanyVATNumber> 
     <ns2:Amount>1000.00</ns2:Amount> 
    </ns2:IntraClient> 
</ns2:IntraListing> 
</ns2:IntraConsignment> 

: XSLT 2.0이 훨씬 더 규범 반면 XSLT 1.0 네임 스페이스 접두사의 선택의 여지

<ns2:IntraConsignment xmlns:ns2="http://www.minfin.fgov.be/InputCommon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.minfin.fgov.be/IntraConsignment NewICO-in_v0_7.xsd" xmlns="http://www.minfin.fgov.be/InputCommon" IntraListingsNbr="1"> 
<ns2:Representative> 
    <RepresentativeID identificationType="NVAT" issuedBy="BE">9876941603</RepresentativeID> 
</ns2:Representative> 
<ns2:IntraListing SequenceNumber="1" ClientsNbr="1" AmountSum="1000.00"> 
    <ns2:Declarant> 
     <VATNumber>9876941603</VATNumber> 
    </ns2:Declarant> 
    <ns2:Period> 
     <ns2:Month>07</ns2:Month> 
    </ns2:Period> 
    <ns2:IntraClient SequenceNumber="1"> 
     <ns2:CompanyVATNumber issuedBy="DE">123456</ns2:CompanyVATNumber> 
     <ns2:Amount>1000.00</ns2:Amount> 
    </ns2:IntraClient> 
</ns2:IntraListing> 
</ns2:IntraConsignment> 

답변

0

는, XSLT 프로세서에 크게 남아 있습니다. 그러나 대부분의 XSLT 1.0 프로세서는 엄격하게 요구되지는 않지만 "옳은 일"을 수행합니다.

당신은 기본적으로 두 가지 규칙을 갖고있는 것 같다 :

의 (a) 네임 스페이스 http://www.minfin.fgov.be/IntraConsignment의 요소는 접두사 NS2를 사용하여 복사해야합니다

<xsl:template match="x:*" xmlns:x="http://www.minfin.fgov.be/IntraConsignment"> 
    <xsl:element name="ns2:{local-name()}" namespace="http://www.minfin.fgov.be/IntraConsignment"> 
    <xsl:copy-of select="@*"/> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

(b)의 네임 스페이스 http://www.minfin.fgov.be/InputCommon 요소는 출력해야한다 기본 네임 스페이스 :

<xsl:template match="x:*" xmlns:x="http://www.minfin.fgov.be/InputCommon"> 
     <xsl:element name="{local-name()}" namespace="http://www.minfin.fgov.be/InputCommon"> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template>