2008 13 de agosto de 2008

Tokenizing seqüência de caracteres delimitada dentro de um XSL

Se a sua exigência é para dividir um valor de nó em um XML, que contém uma seqüência de caracteres delimitada de valor, em itens individuais, então você chegou ao lugar certo ... ter um olhar para o exemplo abaixo. Se você está familiarizado com um pouco de XML e XSL ... Eu não acho que você iria precisar de qualquer explicação.
Além disso, este exemplo inclui o uso de funções como XSL xsl: call-template, xsl: substring, antes, xsl: substring-after, se é isso que você está depois.

XML para ser transformado (food.xml): -
Suponha que a tarefa é tokenize a seqüência de caracteres delimitados por vírgula, nos a tag "keywords"

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl): -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Resultante de saída HTML: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Escusado será dizer ... basta alterar o parâmetro "delimitr" para o delimitador de sua escolha


2008 11 de agosto de 2008

Download Faux Posicionado Template WordPress

Se você é um daqueles caras (como eu), que muitas vezes verificar a CSS bem feito de página HTML, para se inspirar ou o que quer, então você deve ter notado que temos usado Posicionamento FAUX (como já mencionado em meu artigo anterior Somos usando posicionamento absoluto falso: Um Layout CCS Brilhante )

Fizemos um bom trabalho neste modelo, então pensei que seria bom para compartilhá-lo .... Download Tema WordPress (baixado 196 vezes)


2008 07 de agosto de 2008

Animoto: Really Nice "rica interface de usuário" sem Flash!

Você já viu animoto.com? Bem! este não é um anúncio, eu realmente gostei! e é beijo UI ASS fato

Me deparei com este site, há algumas semanas. Viu a primeira página, força se preocupar muito. Para mim, era apenas mais um site com algum conteúdo em Flash rico, permitindo aos usuários fazer upload de imagens, escolher alguns pista e convertê-lo em uma apresentação de slides bela imagem. Baixar FLV, e colocá-lo em qualquer local de sua escolha (YouTube, Metacafe, Facebook e similares) ... PERÍODO.

Ontem quando vi as páginas internas de fluxo, o que levou o usuário através da criação deste slideshow .... Fui OH WOW! Quando percebi que não havia pouco de FLASH usado. Foi de facto uma rica interface de usuário. Todos os desenvolvedores de interface do usuário deve aspirar a criar ou pelo menos ser uma parte da equipe que fez esta interface .... Absolutamente brilhante! E inspirador!

Dê uma olhada ... http://animoto.com/ ... e se registrar e jogar com ele ... só então você pode apreciar o gênio.


2008 04 de agosto de 2008

Um problema com a posição () em XSL ... ou é?

Eu tive esse problema ao criar uma Armazenamento em XSL hoje. Procurava respostas em toda a rede, mas não poderia encontrar qualquer .... Na verdade, eu acho! Eu sei o que força o meu problema era, então o que devo procurar?

Enfim! Apenas no caso de você ter esse mesmo problema e também de alguma forma pelo poder a força que você conseguiu atingir esta página ... você poderia me agradecer toneladas ... E se você acidentalmente aterrou nesta página por algum estranho destino e tiver que ser um desenvolvedor XSL, fazem uma NOTA DESTE Agora, para a causa futuro, se algum dia, você enfrentar esse problema, então a força pode não ser com você.

Enunciado do problema:
Eu tenho esse XML, onde existem dois nós com vários itens em que os itens e entre estes dois nós têm uma correspondência um para um. No exemplo abaixo, cada item da <arrayname="PLAYURL" /> relaciona (posição correspondente) para um item na <arrayname="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Agora, eu tenho um loop, onde i percorrer <array name="SITENAME">, e eu quero pegar o item relacionado (na posição correspondente) em <array name="PLAYURL">,

O que você normaly tentar fazer é ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

DESCULPE! Isso não vai funcionar ... Ah!! Surpised ...

Agora você provavelmente quer tentar, algo assim ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

E Novamente, isto não vai funcionar ... Agora você coçar a cabeça, tentando entrar em contato com todos que você acha que sabe alguma XSL e poderia ser de alguma ajuda ... você tentar todas as opções de outros ... e ainda não vai funcionar ... Bem! Isso é o que aconteceu comigo pelo menos ...

DESESPERO NÃO FAZ! EXPERIMENTE ESTE

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Não me pergunte por que funciona. Porque eu não tenho um motivo certo ... se você fizer! Por favor, deixar um comentário. Pode ser muito útil. Também! se você tem título melhor para este post, fazer cair-me uma linha :)


2008 02 de agosto de 2008

Definir o DOCTYPE no XSL

Na semana passada eu criei um layout HTML / CSS progessive para um cliente, testei no IE6, IE7 e FF 3, parecia perfeitamente bem ... ATÉ! o layout foi mais baixo do ciclo manufacting. Ele falhou. Elementos de layout de página só fui em todo o lugar quando o layout HTML foi convertido em XSL e XML aplicada a ele ... Bummer!

Não foi possível dormir ok no fim de semana, na manhã antecipação da segunda-feira, quando eu vou ter que corrigir esse SH **. Mas agora ter um pouco experince em lidar com este tipo de situações (Peculiaridades do navegador, quero dizer), eu sabia que tinha a ver com nada, mas DOCTYPE .... e foi ...

O problema:
Você quer controle sobre o DOCTYPE, desde sua transformação vai incluir um DOCTYPE padrão explicitamente, e você layout ficará fora por um lance.

A solução:
XSLT especificações fornece métodos de saída para definir um DOCTYPE de escolha. Além disso, para nós desenvolvedores de interface do usuário, os tópicos de interesse seriam métodos de saída HTML e métodos de saída XML .

Bem! antes de você se cansar, aqui está a correção.

Por exemplo, se você tivesse o DOCTYPE seguinte na sua versão HTML:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Em seguida, no XSL você teria que ter o seguinte: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

e Finalmente! certifique-se que sua saída XSLT obedece à DOCTYPE que você escolheu.


NDK casa | Expressando IT | Palate Expressando | Penmenship Expressando | Awe Expressando | expressar-me