2014-04-08 3 views
0

XML 변환과 네임 스페이스 추가시 유선 문제에 직면하고 있습니다. 아래는 XML과 XSL입니다. 문제는 내 변환 된 XML이 네임 스페이스 속성 (xmlns = "")을 내가 원하지 않는 엘라프에 첨부했다는 것입니다. 예상 결과 아래xslt를 사용하는 transforamtion 중 이름 공간 문제가 발생했습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<Import xmlns="http://example.com" ImportType="BASE"> 
    <Books> 
     <book1>Wise Otherwise</book1> 
     <book2>Great Expectations</book2> 
    </Books> 
    <elab> 
     <Name> Forsyth </Name> 
     <city> Cumming </city> 
    </elab> 
</Import> 

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Catalog> 
    <Books> 
     <book1>Wise Otherwise</book1> 
     <book2>Great Expectations</book2> 
    </Books> 
    <library> 
     <Name> Forsyth </Name> 
     <city> Cumming </city> 
    </library> 
</Catalog> 

입력 XML 당신의 도움 감사합니다 나의 XSL입니다

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="library"> 
    <elab> 
     <xsl:apply-templates /> 
    </elab> 
</xsl:template> 

<xsl:template match="Catalog"> 
    <Import xmlns="http://example.com" ImportType="BASE"> 
     <xsl:apply-templates /> 
    </Import> 
</xsl:template> 
</xsl:stylesheet> 

답변

1

library 일치하는 템플릿이 더 네임 스페이스의 elab 요소를 생성하기 때문에 , 따라서 serializer는를 추가해야합니다.을 사용하면 결과 트리를 정확하게 serialize 할 수 있습니다. 당신이 xsl:stylesheet 요소까지 xmlns="http://example.com"를 이동하는 경우, 다음 스타일 시트 모든 접두어가 문자 그대로의 결과 요소는이 네임 스페이스에있을 것입니다, 당신은 당신이 필요로하는 결과를 얻을 것이다 : 여기

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://example.com" > 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="library"> 
    <elab> 
     <xsl:apply-templates /> 
    </elab> 
</xsl:template> 

<xsl:template match="Catalog"> 
    <Import ImportType="BASE"> 
     <xsl:apply-templates /> 
    </Import> 
</xsl:template> 
</xsl:stylesheet> 

더 많은 일반 지점 XSLT (또는 네임 스페이스를 인식하는 XML 도구)로 작업 할 때 xmlns "특성"을 으로 생각하지 말고 오른쪽 네임 스페이스에서 요소를 만들고 네임 스페이스 바인딩을 사용하여 자기 돌봐.

1 : 실제로 멀리 XML 데이터 모델에 관한 한 속성을하지 않는 그들이 것처럼 당신이 그들을 조작 할 수 없기 때문에 나는 따옴표 "속성"그들에게 전화

관련 문제