2013-04-30 100 views
0

我有一個輸入XML,我想用XSLT將它轉換爲其他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是艱難

+0

瞭解它,請再次檢查 – user2334314 2013-04-30 03:00:08

回答

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> 
+0

太棒了!它的工作..謝謝你:) – user2334314 2013-04-30 07:53:07