Xsl - Как выбрать значение из атрибута, имя которого содержит специальный символ - PullRequest
0 голосов
/ 18 мая 2011

Моя цель - получить данные из Google Place.У меня есть следующий фрагмент HTML:

<div class="rsw-pp rsw-pp-widget">
    <div  g:type="AverageStarRating" 
        g:secondaryurls="http://maps.google.com/?cid=12948004443906002997"
        g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997" g:groups="maps" g:rating_override="2.998000" class="rsw-stars">
    </div>
</div>

Я хочу получить значение g: rating_override.Я попытался со следующим xsl

<Rating>

  <xsl:value-of 
    select="//div[@class='rsw-pp rsw-pp-widget']/div[@class='rsw-stars']/@g:rating_override" />

 </Rating>

Он сказал, что «System.Xml.Xsl.XsltException: префикс« g »не определен».Не могли бы вы помочь мне?

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Если вы используете встроенные инструменты Html Agility Pack XSLT, вы сталкиваетесь с двумя жесткими ограничениями Html Agility Pack (по крайней мере, в версии 1.3.0.0):

  • Поддержка пространств имен ограничена
  • Реализация XPATH не поддерживает переход к атрибутам (только выбор). Например, XPATH "// tag1 / tag2 / @ myatt" не работает.

Вы можете преодолеть эти ограничения с помощью кода C #, но не просто с помощью чистого XPATH, следовательно, не с XSLT.

В этом случае часто проще преобразовать HTML в XML с помощью Html Agility Pack, а затем использовать обычный XSLT для XML со стандартными классами .NET вместо XSLT для HTML с классами Html Agility Pack.

1 голос
/ 18 мая 2011

Вам необходимо определить пространство имен "g". Обычно это делается для элемента stylesheet.

<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:g=" ... "
     version="1.0">
...