XSLT и Googles пользовательский поиск по XML сайту - PullRequest
1 голос
/ 04 февраля 2011

Я использую пользовательский поиск по Googles XML ( Google XML sitesearch ) и использую XSLT в .NET для преобразования результатов в HTML. У меня есть несколько вопросов относительно XSLT.

1) Google вернет что-то похожее на следующее

<GSP VER="3.2">
  <PARAM name="start" value="0" />
  <PARAM name="num" value="10" />
  <RES>
    <R>
      <PageMap>
        <DataObject>
          <Attribute name="Rating" value="4.5" />
          <Attribute name="RatingCount" value="743" />  
        </DataObject>
      </PageMap>
    </R>
  </RES>
</GSP>

Мне интересно следующее:

Как бы я получить значение одного из ПАРАМ (т. Е. Start или num)? И как мне получить значение одного из атрибутов объекта DataObject?

Любая помощь высоко ценится.

Спасибо

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

Никогда не используйте //, когда схема известна.

Чтобы получить начальное значение, используйте:

/GSP/PARAM[@name='start']/@value

Чтобы получить параметр num:

/GSP/PARAM[@name='num']/@value

Чтобы получить рейтинг:

/GSP/RES/R/PageMap/DataObject/Attribute[@name='Rating']/@value
0 голосов
/ 04 февраля 2011

Я предлагаю использовать ключи в случае, если к параметрам в этом примере нужно обращаться по именам из различных контекстов. Использование ключей также защитит ваши источники от повторения xpath снова и снова.

<!-- Key declaration -->    
<xsl:key name="gsp-param" match="/GSP/PARAM/@value" use="../@name"/>

<xsl:template name="some-template">
    <!-- Get key value in unknown context -->
    <xsl:value-of select="key('gsp-param', 'num')"/>
</xsl:template>
0 голосов
/ 04 февраля 2011

Используя XPath, вы можете ссылаться на эти значения следующим образом:

/GSP/PARAM[@name='num']/@value

Для атрибутов DataObject это будет

//DataObject/Attribute[@name='Rating']/@value

Однако вам необходимо уточнить, в каком контексте вам нужно получитьэти значения как выражения в большинстве случаев могут быть короче (я использовал полный путь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...