2010-08-18 3 views
0

По какой-то причине таблица XSLT YQL не может проанализировать мою таблицу стилей. Я успешно использовал таблицу стилей с помощью службы XSLT W3C. Вот пример проблемы в YQL Console. Почему это не работает в YQL?Ограничения реализации YQL XSLT

Кроме того, мне еще предстоит выяснить, как передать результаты запроса YQL в таблицу XSLT как преобразованный XML, а также указать URL-адрес таблицы стилей. Текущее обходное решение - злоупотребление службой W3C.

+0

Это не хорошая практика, чтобы связать с большим источником в другом месте. Вы должны создать образец ввода с уменьшением –

+0

Я обрезал образец XML-файла, который обрабатываю. – robartsd

+0

Прежде чем начать работу с XSLT, я попытался получить результаты YQL с помощью таблицы XML через оставшийся URL-адрес, который не работал, но XSLT не имел проблем с использованием результатов YQL в качестве входных данных. – robartsd

ответ

1

Ваша таблица стилей определяется как 1.0, но вы используете replace() и tokenize(), который является частью стандарта 2.0. Однако это полностью допустимая таблица стилей XSLT/XPath 2.0.

+0

Спасибо. В документации по XPath неясно, что это 2.0 функции. Я попытался изменить объявление, но YQL все равно не нравится. Я предполагаю, что их реализация 1.0. – robartsd

+0

Перезапись таблицы стилей до 1.0 позволила ей работать в YQL. – robartsd

1

В дополнение к Per T ответ, это изменить:

<xsl:variable name="r"> 
<xsl:value-of select="replace(tr/td/p/a/following-sibling::text(), 
           '\s*-\s*(\d+)\.(\d+)\.(\d+)\s*', 
           '$1,$2,$3')" /> 
</xsl:variable> 

с этим:

<xsl:variable name="r" 
     select="translate(tr/td/p/a/following-sibling::text(),'. -',',')"> 

Это:

tokenize($r,',')[1] 

tokenize($r,',')[2] 

tokenize($r,',')[3] 

С этим:

substring-before($r,',') 

substring-before(substring-after($r,','),',') 

substring-after(substring-after($r,','),',') 

Примечание: Это только в случае, если вы не знаете, количество цифр заранее, в противном случае вы могли бы сделать:

substring($r,1,2) 

substring($r,4,2) 

substring($r,7) 

Кроме того, этот

replace(tr/td/p[@class='t11bold']/a,'\s+',' ') 

Это должно быть только это :

normalize-space(tr/td/p[@class='t11bold']/a) 

И, наконец, этот:

replace($d,'^[^\[]*\[\s*(\d+:\d{2})?\s*-?\s*([^\]]*)\]\s*$','$2') 

Может быть:

normalize-space(substring-after(substring-before(substring-after($d,'['),']'),'-')) 
+0

Спасибо, функция normalize-space должна помочь избежать зависимости от регулярных выражений XPATH 2.0. Значения могут быть 2 цифры, поэтому мне нужна подстрока перед & -а после решения. – robartsd

+0

Ваши предложения были очень полезны при переписывании таблицы стилей в 1.0. – robartsd

 Смежные вопросы

  • Нет связанных вопросов^_^