2016-10-10 8 views
1

XMLをより簡略化したフォーマットに変換する必要があります。これはXSLTで行うことができると確信していますが、わかりません。出力要素名が動的なXMLを変換しますか?

私は変換する必要があり

<Fields> 
    <Element1>Value 1</Element1> 
    <Element2>Value 2</Element2> 
</Fields> 

<Fields> 
    <Field> 
    <Name>Element1</Name> 
    <Value>Value 1</Value> 
    </Field> 
    <Field> 
    <Name>Element2</Name> 
    <Value>Value 2</Value> 
    </Field> 
</Fields> 

これは私が現在持っているものです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="Fields/Field/*"/> 
     <xsl:apply-templates select="*[name()]"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

答えて

1

あなたの入力XML、

はこのXSLTで変換

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

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

    <xsl:template match="Field"> 
    <xsl:element name="{Name}"> 
     <xsl:value-of select="Value"/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

要求されるように、この出力XML、

<?xml version="1.0" encoding="UTF-8"?> 
<Fields> 
    <Element1>Value 1</Element1> 
    <Element2>Value 2</Element2> 
</Fields> 

を生成します。

+1

*重要:注意:有効なxml要素名の規則があります。 (1)名前は数字で始めることはできません。 (2)名前は、ハイフンやピリオドなどの特殊文字で始めることはできません。 (3)名前には、ピリオド、ハイフン、アンダースコア、コロン以外の特殊文字を使用することはできません。 – uL1

+0

double translateメソッド - ' 'を使用して、 $ validChars'は、名前に許可したいすべての文字を含む変数です。しかし、これは少し原油です。 – Flynn1179

関連する問題