尝试在ASP.NET中使用XSLT作为XML

时间:2010-05-19 09:11:13

标签: asp.net xml xslt xpath

我有以下xslt表:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:variable name="nhits" select="Answer[@nhits]"></xsl:variable>
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <div>
      <xsl:call-template name="resultsnumbertemplate"/>
    </div>
  </xsl:template>  
  <xsl:template name="resultsnumbertemplate">
    <xsl:value-of select="$nhits"/> matches found
  </xsl:template>  
</xsl:stylesheet>

这是我尝试与之前的xslt混合的xml:

<Answer xmlns="exa:com.exalead.search.v10" context="n%3Dsl-ocu%26q%3Dlavadoras" last="9" estimated="false" nmatches="219" nslices="0" nhits="219" start="0">
  <time>
    <Time interrupted="false" overall="32348" parse="0" spell="0" exec="1241" synthesis="15302" cats="14061" kwds="14061">
      <sliceTimes>15272 </sliceTimes>
    </Time>
  </time>    
</Answer>

我正在使用xslcompiledtransform并且工作正常:

XslCompiledTransform transformer = new XslCompiledTransform();

transformer.Load(HttpContext.Current.Server.MapPath("xslt\\" + requestvariables["xslsheet"].ToString()));

transformer.Transform(xmlreader, null, writer);

我的问题出现在我试图将一个变量放入Answer元素上的“nhits”属性值时,但我没有使用我的xslt表格渲染任何东西。

你知道原因是什么吗?

可能是我的xml文件中的xmlns属性吗?

提前致谢。

最诚挚的问候。

2 个答案:

答案 0 :(得分:1)

您的直接问题是您的XPath是错误的。尝试

<xsl:variable name="nhits" select="/Answer/@nhits" />

但是,我建议改变以完全摆脱变量,你不需要它。

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="Answer">
    <div>
      <xsl:value-of select="@nhits"/>
      <xsl:text> matches found</xsl:text>
    </div>
  </xsl:template>  

</xsl:stylesheet>

答案 1 :(得分:1)

您的变量应为select="Answer/@nhits"

"Answer[@nhits]"的当前xpath尝试选择具有名为Answer的属性的nhits元素。