2011-02-10 2 views
2

아래 xslt 코드는 아래 XML 파일에서 작동하지 않습니다. 그러나 XML 파일의 "개체"노드에서 네임 스페이스 특성을 제거하면 예상대로 작동합니다. 루트 노드에 네임 스페이스 특성이있을 때 작동하도록 xslt 코드를 수정하려면 어떻게해야합니까? 첫 번째 게시, 형식이 엉망인 경우 미안합니다. 감사합니다네임 스페이스가 루트 노드에 선언 된 경우 xslt 스크립트가 작동하지 않습니다.

XML 파일 :

<objects xmlns="http://www.spicefactory.org/parsley" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
<object id="models" type="blah"> 

</object> 
</objects> 

XSLT 코드 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:output method="xml" indent="no"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="object"> 
    <object new_attr="attr value "> 
    <xsl:apply-templates select="node()|@*"/> 
    </object> 
</xsl:template> 
</xsl:stylesheet> 
+0

가능한 중복 기본 네임 스페이스가 xmlns로 설정된 XML 소스] (http://stackoverflow.com/questions/1344158/xslt-with-xml-source-that-has-a-default-namespac) e-set-to-xmlns) –

답변

10

당신 요구를 선언하고 XSLT에서 동일한 XML 네임 스페이스를 사용

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

<xsl:output method="xml" indent="no"/> 

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

<xsl:template match="sfp:object"> 
    <sfp:object new_attr="attr value "> 
    <xsl:apply-templates select="node()|@*"/> 
    </sfp:object> 
</xsl:template> 
</xsl:stylesheet> 
[XSLT와의
+0

감사합니다 필립, 그게 내가 좁힐 수있었습니다. 그것은 내 XML의 기본 네임 스페이스와 관련이 있습니다. 기본 네임 스페이스가 xml에 있으면 xslt 변환이 작동하지 않습니다. 기본 네임 스페이스가 내 xml에서 제거되면 xslt 변환이 작동합니다. 그래서 변환 작업을하고 xml에 기본 네임 스페이스를 유지할 수 있습니까? 감사. – dt1000

+0

자, 이제 xml에서 기본 sfp와 같이 ns caled sfp를 생성하고 스크립트에서 명시 적으로 사용했음을 알았습니다. 고쳐, 고마워! – dt1000

+0

@ user612275 : 적절한 에티켓은 질문에 대한 답이 좋을 때 가장 좋은 표현 방법은이 대답을 받아들이는 것입니다. 이것은 답변 옆에있는 체크 표시를 클릭하여 수행됩니다. 제발, 옳은 일을하십시오. –

관련 문제