0

入力 XML があり、XSLT を使用して他の XML に変換したいと考えています。

入力 XML :

  <XML>
        <Fields>
                    <F1> Val1 </F1>
                    <F2> Val2 </F2>
                    <F1> Val3 </F1>
                    <F4> Val4 </F4>
        </Fields>
        </XML>

出力 XML :

<SomeThing>

    <SomeThing>
                <Field id = "F1"> <val> Val1 </val> </Field>
                <Field id = "F2"> <val> Val2 </val> </Field>
                <Field id = "F3"> <val> Val3 </val> </Field>
                <Field id = "F4"> <val> Val4 </val> </Field>
  </SomeThing>
    </SomeThing>

私のXSLT : (私はそれが間違っていることを知っています:( )

 <xsl:for-each select="XML/Fields">
                    <field>
                        <xsl:attribute name="id">
                            <xsl:value-of select="." />
                            <value> 
                                <xsl:value-of select="current()"/> 
                            </value>
                        </xsl:attribute>
                    </field>
                </xsl:for-each>

XSLT は難しいです。

4

1 に答える 1

2

これは、(テンプレートを使用するため)より拡張可能で<xsl:for-each>、 を使用せず、 を必要としない回答です<xsl:attribute>

この XSLT の場合:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

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

  <xsl:template match="Fields/*">
    <Field id="{name()}">
      <val>
        <xsl:apply-templates/>
      </val>
    </Field>
  </xsl:template>
</xsl:stylesheet>

...提供された XML に適用されます。

<XML>
  <Fields>
    <F1> Val1 </F1>
    <F2> Val2 </F2>
    <F1> Val3 </F1>
    <F4> Val4 </F4>
  </Fields>
</XML>

...必要な出力が生成されます。

<SomeThings>
  <SomeThing>
    <Field id="F1">
      <val> Val1 </val>
    </Field>
    <Field id="F2">
      <val> Val2 </val>
    </Field>
    <Field id="F1">
      <val> Val3 </val>
    </Field>
    <Field id="F4">
      <val> Val4 </val>
    </Field>
  </SomeThing>
</SomeThings>
于 2013-04-30T04:30:49.560 に答える