Необходимо преобразовать значение ISBN в ссылку поискового запроса Amazon с помощью XSLT. - PullRequest
0 голосов
/ 03 марта 2010

Я использую XSL для преобразования атрибута resource, он проверит, содержит ли он "urn:ISBN". Если это так, то ему нужно получить значение номера ISBN и вернуть его в качестве поискового запроса Amazon. Например

resource="urn:ISBN:0752820907"

затем изменить на

http://www.amazon.com/gp/search/ref=sr_adv_b/?field-isbn=0752820907

Проблема в том, что я не знаю, как выполнить сопоставление строк, а также копирование строк с использованием XSL. Пожалуйста, помогите, спасибо.

обновление

ниже мой XSL-код, он все еще не может дать желаемый результат. Созданная гиперссылка предназначена для размещения на столбце таблицы

<td style="background-color: #F7F6F3">
<xsl:choose>

<xsl:when test="*/@rdf:resource">

<xsl:if test="starts-with(text(),'urn:ISBN')">
<xsl:variable name="ISBN" select="substring-after(text(),'urn:ISBN:')"/>
<xsl:value-of 
select="concat ('http://www.amazon.com/gp/search/ref=sr_adv_b/?field-isbn=',$ISBN)"/>
</xsl:if>
</xsl:when>
</xsl:choose>
</td>

данные, над которыми я работаю, - это RDF в формате XML.

обычное изображение книг rel = "foaf: Interest" resource = "Urn: ISBN: 0752820907"

Ответы [ 2 ]

3 голосов
/ 03 марта 2010

К сожалению, XSLT довольно не хватает функциональности для работы со строками. К счастью, то, что вы пытаетесь сделать, не так уж сложно.

Вам нужно начать с просмотра функции starts-with() XPath . Возвращает true, когда первый параметр начинается со второго параметра.

Таким образом, вы можете построить xsl:if элемент с starts-with() в тесте, чтобы увидеть, начинается ли строка с «urn: ISBN»:

<xsl:if test="starts-with(text(),'urn:ISBN')">
   <!-- This will be executed if the current node starts with 'urn:ISBN' -->
</xsl:if>

Следующее, что вам нужно сделать, это создать URL. Это тоже легко, используя функции concat() и substring-after():

<xsl:if test="starts-with(text(),'urn:ISBN')">
  <xsl:variable name="ISBN" select="substring-after(text(),'urn:ISBN:')"/>
  <xsl:value-of 
    select="concat('http://www.amazon.com/gp/search/ref=sr_adv_b/?field-isbn=',$ISBN)"
  />
</xsl:if>

То, что делает этот фрагмент, выполняет синтаксический анализ ISBN (что происходит после «urn: ISBN») и сохраняет его в переменной. Затем он объединяет эту переменную с URL-адресом Amazon для получения окончательного результата.

1 голос
/ 03 марта 2010

Вы можете использовать XSL-функцию старт-с (str1, str2) для проверки вашей строки, а затем заменить (str, pattern, replace).

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