我无法从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>
答案 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>