2009-03-18 22 views
1

.NET 2.0 TreeViewコントロールで使用するためのXML文書の変換:私は次の形式であるXMLファイルを持っている

私は標準の.NET 2.0 TreeViewコントロールでそれを使用する必要が
<root> 
    <category> 
    <doctype> 
     <name>Doc1</name> 
     <site> 
     <name>Site1</name> 
     <target>iframe</target> 
     <url>http://www.gmail.com</url> 
     </site> 
    </doctype> 
    <doctype> 
     <name>Doc2</name> 
     <site> 
     <name>Site2</name> 
     <target>iframe</target> 
     <url>http://www.bbc.co.uk</url> 
     </site> 
    </doctype> 
    </category> 
</root> 

は、XMLを必要とします次の形式

<root> 
    <category> 
    <doctype name="Doc1"> 
     <site name = "Site1" target = "iframe" url = "http://www.gmail.com"> 
     </site> 
    </doctype> 
    <doctype name="Doc2"> 
     <site name = "Site2" target = "iframe" url = "http://www.bbc.co.uk"> 
     </site> 
    </doctype> 
    </category> 
</root> 

で最大の合併症は、自分の(つまり、サイトの属性を必要とする子ノードとして、いくつかの滞在ながらDOCTYPEノードのいくつかの子ノードが属性(すなわちNAME)に変換する必要があるという事実であります)。

これはどのようにXSLTを使用して行うことができますか?

+0

あなたは私の答えで変換がずっと簡単になる名前の一貫性のある場合に落ち着くことができます。また、あなたの入力XML *が*引用符で囲まれているかどうかわかりません。あなたもそれを確認できますか? – Tomalak

+0

お詫び申し上げます、私は実際には何かを模倣しようとしたことをノックしましたが、ケースに注意を払わず、引用符を忘れました。 – eMTeeN

+0

新しい質問に合わせて自分の答えを変更しました。あなたは今それがもっと簡単であることがわかります。 – Tomalak

答えて

3

次のXSLT 1.0変換は、あなたが意図したとおりに行います。

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

    <xsl:template match="root | category | doctype | site"> 
    <xsl:copy> 
     <xsl:apply-templates select="*" /> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="name | target | url"> 
    <xsl:attribute name="{local-name()}"> 
     <xsl:value-of select="." /> 
    </xsl:attribute> 
    </xsl:template> 

</xsl:stylesheet> 

出力:

<root> 
    <category> 
    <doctype name="Doc1"> 
     <site name="Site1" target="iframe" url="http://www.gmail.com"></site> 
    </doctype> 
    <doctype name="Doc2"> 
     <site name="Site2" target="iframe" url="http://www.bbc.co.uk"></site> 
    </doctype> 
    </category> 
</root> 
+0

は、変更された質問のためのより簡単な解決策に感謝します。ありがとう – eMTeeN

関連する問題