2009-03-30 2 views
3

나는 다음의 '이름'속성과 같은 속성으로 XML을 변환하는 연결 것 :XSLT에서 요소 속성을 요소 이름으로 변환하는 방법은 무엇입니까?

<books> 
    <book name="TheBumperBookOfXMLProgramming"/> 
    <book name="XsltForDummies"/> 
</books> 

이름 속성에 무엇이라고 요소로 :

<books> 
    <TheBumperBookOfXMLProgramming/> 
    <XsltForDummies/> 
</books> 

XSLT를 사용하여. 어떤 아이디어?

+0

아래 답변이 유효합니다. @ divo는 정확히 내가 물어 본 것입니다. @ Martin은 염두에 두어야 할 추가 고려 사항입니다. 두 가지 모두에게 감사드립니다. – Brabster

+0

왜 이것을하고 싶습니까? 그것은 많은 의미를 가지지 않습니다. – AmbroseChapel

+0

@Ambrose - 호기심? 또한 후자에 대한 XMLSchema를 정의하는 것이 더 직관적 인 것처럼 보입니다. – Brabster

답변

4
당신은 xsl:element를 사용하여 이름으로 요소를 만들 수 있습니다

:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

    </xsl:template> 

    <xsl:template match="book"> 
    <xsl:element name="{@name}" /> 
    </xsl:template> 

</xsl:stylesheet> 
+0

문자 세트가 요소 이름으로 더 제한되어 있기 때문에 잘못된 xml (read : not xml)이 작성 될 수 있습니다. – pc1oad1etter

+0

@ pc1oad1etter : 어떻게 더 제한됩니까? 내가 아는 한이 둘 모두는 [생산 규칙] (http://www.w3.org/TR/REC-xml/#NT-Name)에 따른 이름이며, –

3
<xsl:template match="book"> 
    <xsl:element name="{@name}"> 
     <xsl:copy-of select="@*[name()!='name'] /> 
    </xsl:element> 
</xsl:template> 

이 또한 사본을 <book>에 어떤 속성을 통해이

<book name="XsltForDummies" id="12" /> 

<XsltForDummies id="12 /> 
로 바뀝니다 '이름'라는 이름하지
관련 문제