2010-11-11 13 views
1

Привет, как объявить ссылку (например: http: //www.google.com) в качестве переменной, а затем использовать переменную для else, если? Что-то вроде это?Как объявить переменную как ссылку в XSLT

<xsl:element name="a"> 
<xsl:attribute name="href">http://www.google.com</xsl:attribute>// first get the link 
<xsl:choose> 
<xsl:when test="http://www.google.com"> 
    Do something 1 
</xsl:when> 
<xsl:otherwise> 
    Do something 2 
</xsl:choose> 
</xsl:element> 

Возможно ли это? Что я должен смотреть?

+0

Вы хотите, чтобы соответствовать против содержания строки, т.е. «HTTP:. // WWW Google ком.», Или делать какие-то разрешения или проверки первый? – dlanod

+0

Было бы полезно, если бы вы предоставили свой входной XML и то, что вы хотите, чтобы результат выглядел. В противном случае мы просто догадываемся о том, чего вы хотите. –

+0

Хороший вопрос, +1. См. Мой ответ для полного рабочего примера. –

ответ

3

там далеко от того, как объявить ссылку (т.е. HTTP: //www.google.com) в качестве переменной, а затем с помощью переменной в течение еще если?

Используйте этот код в качестве рабочего примера - вы, конечно, нужно, чтобы узнать, по крайней мере, основы XSLT:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="vLink" select="'http://www.google.com'"/> 

<xsl:template match="/"> 
    <xsl:choose> 
    <xsl:when test="$vLink = 'http://www.google.com'"> 
     It is the Google link... 
    </xsl:when> 
    <xsl:otherwise> 
    It is not (exactly) the Google link... 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

когда это преобразование применяется на любой документ XML (не используется), разыскиваемый результат получается:

It is the Google link... 

можно также использовать глобальный <xsl:param>. Это может быть установлено снаружи вызовом преобразования.

+0

+1 Хороший ответ. –

0

Соответствует прямому содержимому и объявляет URL как переменную.

-1

В некоторой степени это возможно, но в XSL нет конструкции if-else. Вот версия, которую я тестировал, чтобы вы могли адаптироваться к вашим потребностям. Вход я использовал:

<?xml-stylesheet type="text/xsl" href="test.xsl"?> 
<xml> 
    <LinkValue>http://www.google.com/</LinkValue> 
</xml> 

XSL, что показ «Сделайте что-нибудь 1», если LinkValue была строка выше или «Сделайте что-нибудь 2», если я изменил это было:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:variable name="LinkValue" select="//LinkValue"/> 
     <xsl:element name="a"> 
      <xsl:attribute name="href"><xsl:value-of select="$LinkValue"/></xsl:attribute> 
      <xsl:if test="$LinkValue = 'http://www.google.com/'"> 
       Do something 1 
      </xsl:if> 
      <xsl:if test="$LinkValue != 'http://www.google.com/'"> 
       Do something 2 
      </xsl:if> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

Надеюсь, вы можете используйте эти образцы, чтобы точно определить, что вам нужно реализовать для вашего сценария.

+0

Хммм не знаю, почему ссылка, которую я использовал для XSLT, сказала нет, если-else, когда выбираете-когда существует. Ответ Димитрия лучше. – dlanod

+0

Благодарим за помощь – someguy

0

Если вам это нужно более глобально попробовать это:

... 
<xsl:apply-templates select="a" /> 
... 

<xsl:template match="a"> 
    Just a link 
</xsl:template> 

<xsl:template match="a[starts-with(@href, 'http://google.com/') or starts-with(@href, 'http://www.google.com/')]"> 
    Link to google.com 
</xsl:template> 
Смежные вопросы