XML,XSLT值未填充

时间:2014-12-29 10:42:10

标签: .net xml xslt

我无法从xslt读取以下属性值(" AttributeValue")我是否通过使用

做错了什么

< ----在这里我无法粘贴xml格式代码---它说没有正确格式化,虽然它是 - >在下面的注释中添加了xml和xslt

<MonthlyReport>
  <lstAttributes>
    <Attributes>
      <AttributeName>Stories</AttributeName>
      <AttributeValue>2000</AttributeValue>
    </Attributes>
  </lstAttributes>
</MonthlyReport>


<xsl:template match="/MonthlyReport">
<html>
  <table>
    <tr>
      <td>
        <xsl:choose>
          <xsl:when test="lstAttributes/Attributes/AttributeName='Stories'">
            <xsl:value-of select="AttributeValue"/>
          </xsl:when>
        </xsl:choose>
      </td>
    </tr>
  </table>
</html>
</xsl:template>

2 个答案:

答案 0 :(得分:1)

此处的问题是您正在测试lstAttributes/Attributes/AttributeName,但之后尝试选择不在当前范围内的AttributeValue(在输入此模板时,我们仍处于/MonthlyReport范围内) 。鉴于您的选择中没有otherwise,您可以尝试改为:

<xsl:template match="/MonthlyReport">
<html>
  <table>
    <tr>
      <td>
        <xsl:value-of 
      select="lstAttributes/Attributes[AttributeName='Stories']/AttributeValue"/>
      </td>
    </tr>
  </table>
</html>
</xsl:template>

如果找不到任何内容,这将使td为空。

如果您确实希望在otherwise中执行不同的操作,则需要重复完整路径(除非您将lstAttributes/Attributes置于当前状态):

<xsl:choose>
   <xsl:when test="lstAttributes/Attributes/AttributeName='Stories'">
     <xsl:value-of select="lstAttributes/Attributes/AttributeValue"/>
   </xsl:when>
   <xsl:otherwise>
      <xsl:text>No Stories present</xsl:text>
   </xsl:otherwise>
 </xsl:choose>

请注意,当然所有Attribute*实际上都是元素,因此在您的问题中对属性的初步混淆。

答案 1 :(得分:0)

给出输入XML,如:

<item name="foo">contents</item>

如果上下文节点为item,则属性值的路径为@name。如果上下文节点为@item,则为属性值.的路径。

<xsl:template select="item">
    <xsl:value-of select="@name"/>
</xsl:template>

<xsl:template select="@name">
    <xsl:value-of select="."/>
</xsl:template>