2009-03-30 22 views
3

私は、次の '名前' 属性のような属性を持つXMLを変換するためにリンクしたい:要素属性をXSLTの要素名に変換するにはどうすればよいですか?

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

name属性にあったものをと呼ばれる要素に:

<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 name="XsltForDummies" id="12" /> 

'名前' という名前のない<book>上の任意のプロパティに対するこのもコピーが

<XsltForDummies id="12 /> 
に変わります
関連する問題