如何使用xslt从数组中获取所有xml值?

时间:2018-02-27 12:32:49

标签: xml xslt

我关注java xml file array and level=1 and length=3, 我tried using for-eachhow to get all values upto length =3 ?

输入xml -

<field name="demoCon">
          <array class="com.demo.xml.Message" length="3" level="1">
            <object class="com.demo.xml.Message">
              <field name="myCode">
                <value class="java.lang.String">123</value>
              </field>
              <field name="Name">
                <value class="java.lang.String"/>
              </field>            
            </object>
           <object class="com.demo.xml.Message">
              <field name="myCode">
                <value class="java.lang.String">456</value>
              </field>
              <field name="Name">
                <value class="java.lang.String"/>
              </field>            
            </object>
          <object class="com.demo.xml.Message">
              <field name="myCode">
                <value class="java.lang.String">789</value>
              </field>
              <field name="Name">
                <value class="java.lang.String"/>
              </field>            
            </object>
          </array>
        </field>

xslt我尝试使用以下代码 -

<demoCon>     
              <xsl:for-each select="field[@name= 'demoCon']/array[@class='com.demo.xml.Message']/object[@class='com.demo.xml.Message']">

                <xsl:variable name="var:DemoName2" select="@name" />
                <xsl:variable name="var:DemoValue2" select="value/text()" />

                <myCode>
                  <xsl:if test="string($var:varName2)='myCode'">
                    <xsl:value-of select="$var:varValue2" />
                  </xsl:if>
                </myCode>
                <Name>
                  <xsl:if test="string($var:varName2)='conditionName'">
                    <xsl:value-of select="$var:varValue2" />
                  </xsl:if>
                </Name>

              </xsl:for-each>
            </demoCon>

我错过了一些东西,我想在上面的xslt代码中是level = 1和length = 3。

1 个答案:

答案 0 :(得分:1)

您的XSLT定义了名为var:DemoName2var:DemoValue2的变量,但在您的xsl:if语句中,您要测试$var:varName2并使用$var:varValue2

我认为你不必担心在这里使用变量。您可以将代码简化为此....

<xsl:for-each select="field[@name= 'demoCon']/array[@class='com.demo.xml.Message']/object[@class='com.demo.xml.Message']">
  <myCode>
    <xsl:value-of select="field[@name='myCode']/value" />
  </myCode>
  <Name>
    <xsl:value-of select="field[@name='Name']/value" />
  </Name>
</xsl:for-each>