2012-09-21 3 views
0

내 xslt에 다음과 같은 변수가 있습니다.XSLT 속성에 xml 저장

<xsl:variable name="metadata"> 
    <Metadata> 
     <xsl:apply-templates select="..." /> 
    </Metadata> 
</xsl:variable> 

그런 다음 다른 노드에 xsl : 속성으로 메타 데이터 xml을 추가하려고합니다. 나는 가치의 사본을 시도했으나 효과가 없었습니다. copy-of를 사용할 때 아래 오류가 발생합니다.

<OtherNode> 
    <xsl:attribute name="someAttr"> 
     <!-- I tried these and neither worked --> 
     <xsl:value-of select="$metadata" /> <!-- Empty --> 
     <xsl:copy-of select="$metadata" /> <!-- Error --> 
    </xsl:attribute> 
</OtherNode> 

'속성'유형의 항목은 '속성'유형의 노드 내에 구성 할 수 없습니다.

그건 꽤 솔직한 일이지만, 어떤 이유로 자동으로 요소를 벗어날 것이라고 생각했습니다.

나는 xslt 1.0을 사용하고 있습니다.

아이디어가 있으십니까?

감사

+0

fahed이 답변을 유용하게 사용할 수 있습니다. * 모든 XML 문서를 속성으로 serialize하는 방법을 보여줍니다. http://stackoverflow.com/a/11623265/36305 –

답변

0

약간 모드로 작동합니다 가치로 사용하는 첫 번째 시도는 (XS 사용 : 텍스트) 만 적용 템플릿의 값이 메타 데이터 요소없이 전화 적어도 반환해야합니다. apply-templates select = "..."비트가 실제로 뭔가를 찾고 반환하는 것이 확실합니까?

<xsl:variable name="metadata"> 
<xsl:text>&lt;Metadata></xsl:text> 
    test 
<xsl:text>&lt;/Metadata></xsl:text> 
</xsl:variable> 


<xsl:template match="some-element"> 
    <xsl:element name="some-element"> 
    <xsl:attribute name="test"><xsl:value-of select="$metadata" /></xsl:attribute> 
    </xsl:element> 
</xsl:template> 

과 같은 출력은 같습니다 :

이 작동 당신이 당신의 변수에 텍스트 만 이상을 포착, 대신 node() 또는 node-set있는 것 같다

<some-element test="&lt;Metadata&gt;&#xA;  test&#xA;&lt;/Metadata&gt;"> 
+0

그래, 그게 내가 전에했던 일이야. 나는 너의 대답을 보았다. 이런 식으로 할 필요가 없기를 바랬지만, 오 잘. 감사! – fbhdev

+0

아무런 문제가 없지만 "시원한"솔루션은 아니지만 때로는 끝내는 것이 가장 좋습니다. 그것을 끝내고 다음 프로젝트/도전에 다음 문제로 이동 :) –

0

. 찾고자하는 text() 만 선택하려면 변수를 변경해야합니다.