正确使用value-of select在数据输入字段中选择所需的值

时间:2013-06-23 20:50:17

标签: xslt

我一直在努力使用xsl:value-of select来获得我想要的输出,但是我似乎并没有使用它。

这是XML数据:

<?xml version="1.0" encoding="utf-8"?>
<ENTRY NAME="CustomerSite" CLASS="Site">
  <ENTRY NAME="Production" CLASS="Configuration Set">
<ATTRIBUTE NAME="VersionMinor">
  <VALUE>0</VALUE>
</ATTRIBUTE>
<ATTRIBUTE NAME="VersionMajor">
  <VALUE>3</VALUE>
</ATTRIBUTE>
<ATTRIBUTE NAME="Site Identifier">
  <VALUE>1</VALUE>
</ATTRIBUTE>
<ATTRIBUTE NAME="VersionPoint">
  <VALUE>0</VALUE>
</ATTRIBUTE>
<ATTRIBUTE NAME="Note ID Dial String Digits">
  <VALUE>*90</VALUE>
</ATTRIBUTE>
<ENTRY NAME="Account Codes" CLASS="Account Codes">
<ATTRIBUTE NAME="Enable">
  <VALUE>No</VALUE>
</ATTRIBUTE>
  </ENTRY>
</ENTRY>

这是我使用的XLS代码:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
<html>
  <body>
        <xsl:for-each select="ENTRY">
          <xsl:if test="@CLASS='SITE'">
            <xsl:value-of select="./ENTRY/@NAME"/>
          </xsl:if>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

我要提取的数据是在第一个输入字段中用作NAME值的'CustomerSite'。

由于 Niteowls

1 个答案:

答案 0 :(得分:1)

这里的第一个问题是属性CLASS的值是“Site”(不是“SITE”)。

但是你的输出将是“Production”,因为for-each选择第一个(root)ENTRY而不是选择子ENTRY NAME属性的值。

使用“CustomerSite”。

<xsl:if test="@CLASS='Site'">
    <xsl:value-of select="@NAME"/>
</xsl:if>

或者更好(不需要每个人):

<xsl:value-of select="/ENTRY[@CLASS='Site']/@NAME"/>