Попытка использовать XSLT для XML в ASP.NET - PullRequest
0 голосов
/ 19 мая 2010

у меня есть следующий лист 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>

И это xml, который я пытаюсь смешать с предыдущим xslt:

<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);

Мои проблемы возникают, когда я пытаюсь вставить в переменную значение атрибута «nhits», помещенное в элемент «Ответ», но я ничего не рендерину с использованием моего листа xslt.

Вы знаете, в чем может быть причина?

Может ли быть атрибут xmlns в моем файле xml?

Заранее спасибо.

С наилучшими пожеланиями.

Jose

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Ваша переменная должна быть select="Answer/@nhits"

Ваш текущий xpath из "Answer[@nhits]" пытается выбрать Answer элемент с атрибутом с именем nhits ..

1 голос
/ 19 мая 2010

Ваша непосредственная проблема в том, что ваш 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...