<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ligona Blog</title>
	<atom:link href="http://blog.ligona.org/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ligona.org</link>
	<description></description>
	<lastBuildDate>Fri, 26 Aug 2011 20:46:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Arduino e a Ponte H</title>
		<link>http://blog.ligona.org/articles/arduino-e-a-ponte-h</link>
		<comments>http://blog.ligona.org/articles/arduino-e-a-ponte-h#comments</comments>
		<pubDate>Fri, 17 Jun 2011 11:12:56 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Eletrônicos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=166</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2011/06/74ac139_pl-e1308195989565.jpg" alt="" title="Ponte H - SN754410" width="600" height="300" class="alignnone size-full wp-image-169" />]]></description>
			<content:encoded><![CDATA[<p>Usei no exemplo o modelo SN754410, mais conhecido como ponte H ou H bridge. Este chip que serve para controlar até dois motores com o limite de 1000mA e 36v.<br />
O datasheet pode ser encontrado <a href="http://www.sparkfun.com/datasheets/IC/SN754410.pdf">aqui na sparkfun.com</a>.</p>
<p>Esquema no Fritzing:<br />
<a href="http://blog.ligona.org/files/h_bridge/h_bridge.fz" target="_blank"><img src="http://blog.ligona.org/wp-content/uploads/2011/06/h_bridge_bb-e1308280107688.png" alt="ponte h" title="h bridge" width="600" height="459" class="alignnone size-full wp-image-172" /></a></p>
<p>O código abaixo também está disponível (talvez em versão mais recente no <a href="https://github.com/ochetski/Arduino-Exemplos-Extras/tree/master/h_bridge" target="_blank">github</a>.)</p>
<div class="fvch-code">
<pre class="fvch-line-numbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
</pre>
<pre>boolean
  switchOutputAllow = true;

int
  switchAction = LOW,
  valueButtonSwitch = LOW,
  valueButtonTurn = 0;

const int
  turnPin = A0,         //
  switchPin = 2,        // button
  motor1Pin1 = 3,       // motor 1 direction 1
  motor1Pin2 = 4,       // motor 1 direction 2
  motor1Enga = 6,       // motor 1 on/off
  motor2Pin1 = 9,       // motor 2 direction 1
  motor2Pin2 = 10,      // motor 2 direction 2
  motor2Enga = 12,      // motor 2 on/off
  switchOutputLed = 13; // motor on/off led

void setup() {
  Serial.begin(9600);
  pinMode(turnPin, INPUT);
  pinMode(switchPin, INPUT);
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor1Enga, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(motor2Enga, OUTPUT);
  pinMode(switchOutputLed, OUTPUT);

  // rodar motor 1 em sentido horario
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor1Enga, LOW);

  // rodar motor 2 em sentido anti-horario
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
  digitalWrite(motor2Enga, LOW);

  // led smd desligado
  digitalWrite(switchOutputLed, LOW);
}

void loop() {
  // read what is needed
  valueButtonSwitch = digitalRead(switchPin);
  valueButtonTurn = map(analogRead(turnPin), 0, 1023, 0, 255);
  ///////////////////////////////////////
  // check if button was pressed
  if(valueButtonSwitch == LOW &amp;&amp; switchOutputAllow == true)
  {
      switchOutputAllow = false;
      if(switchAction == LOW)
      {
          switchAction = HIGH;
      }
      else
      {
          switchAction = LOW;
      }
  }
  // check if button was released
  if(valueButtonSwitch == HIGH &amp;&amp; switchOutputAllow == false)
  {
      switchOutputAllow = true;
  }
  // set values from switch
  digitalWrite(motor1Enga, switchAction);
  digitalWrite(motor2Enga, switchAction);
  digitalWrite(switchOutputLed, switchAction);
  ///////////////////////////////////////
  // check position of turn button to set motor rotation
  if(valueButtonTurn &gt; 170)
  {
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
  }
  else if(valueButtonTurn &lt; 85)
  {
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
  }
  else
  {
    //digitalWrite(motor1Enga, LOW);
    //digitalWrite(motor2Enga, LOW);

    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
  }
  ///////////////////////////////////////
  // set output
  Serial.print(&quot;Status: &quot;);
  Serial.print((switchAction == 1 ? &quot;ON &quot; : &quot;OFF&quot;));
  Serial.print(&quot; | Turn: &quot;);
  Serial.print(valueButtonTurn);
  Serial.print(&quot;\n&quot;);
}</pre>
</div>
<p>Dessa forma é possível controlar a direção dos motores e ligar/desligar quando quiser apenas pelo código passando sinal para o chip nos pontos certos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/arduino-e-a-ponte-h/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino e led RGB</title>
		<link>http://blog.ligona.org/articles/arduino-e-led-rgb</link>
		<comments>http://blog.ligona.org/articles/arduino-e-led-rgb#comments</comments>
		<pubDate>Sat, 11 Jun 2011 19:02:02 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Eletrônicos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=148</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2011/06/triple-output-led-rgb-diffused-e1307812473747.jpg" alt="" title="Led RGB difusa" width="600" height="300" class="alignnone size-full wp-image-149" />]]></description>
			<content:encoded><![CDATA[<p>Fiz um teste divertido com o led RGB e vim compartilhar aqui.</p>
<p>O led RGB nada mais é do que 3 leds em um, 3 pinos positivos (red, green e blue) e um negativo compartilhado. Assim como os leds comuns se utiliza um resistor de 330 ohm para cada pino positivo.<br />
O que é realmente divertido desse tipo de led com o Arduino é que você pode realmente fazer qualquer cor com ele. E as cores são controladas individualmente pelo Arduino com números de 0 a 255. Infelizmente para se fazer isso precisamos usar de 3 pinos analógicos, mas existem chips que possibilitam controlar mais leds com poucos pinos.</p>
<p>Nesse teste eu fiz com que 3 potenciômetros controlassem cada um uma cor do led. Fiz com 2 tipos de potenciômetro porque era o que eu tinha, mas isso não faz realmente diferença.</p>
<p><iframe width="600" height="480" src="http://www.youtube.com/embed/rF92hChnIr4" frameborder="0" allowfullscreen></iframe><br />
Desculpe pela qualidade do vídeo, foi feito com um celular.</p>
<p></p>
<h3>O esquema do fritzing</h3>
<p><a href="http://blog.ligona.org/files/rgbl/rgbl.fz" target="_blank"><img src="http://blog.ligona.org/wp-content/uploads/2011/06/rgbl_bb-e1307818656984.png" alt="RGBL Esquema fritzing" title="RGBL Esquema fritzing" width="450" height="350" /></a></p>
<p></p>
<h3>Código</h3>
<p>Arquivo: <a href="http://blog.ligona.org/files/rgbl/rgbl.pde" target="_blank">rgbl.pde</a></p>
<div class="fvch-code">
<pre class="fvch-line-numbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
</pre>
<pre>#include &quot;NewSoftSerial.h&quot;

NewSoftSerial seriOne(9, 10);
NewSoftSerial seriTwo(5, 6);

long waitTill;

void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT);
  pinMode(10, OUTPUT);
  pinMode(5, INPUT);
  pinMode(6, OUTPUT);
  pinMode(13, OUTPUT);

  seriOne.begin(9600);
  seriTwo.begin(9600);
  waitTill = millis() + 2000;
  Serial.println(&quot;To no none&quot;);
  digitalWrite(13, HIGH);
}

void loop()
{
  /*
    if (mySerial.available()) {
        Serial.print((char)mySerial.read());
    }
        mySerial.print(&quot;Test&quot;);
    if (Serial.available()) {
        mySerial.print(&quot;Test&quot;);
        tone(6, 440, 200);
        delay(200);
    }
  */
	while(seriOne.available())
        {
          Serial.println(&quot;To no one&quot;);
          seriTwo.print(seriOne.read());
	}
	while(seriTwo.available())
        {
          int data = seriTwo.read();
          Serial.println(&quot;To no two&quot;);
          Serial.println(data);
	}
        if(waitTill &lt; millis() &amp;&amp; waitTill != 0)
        {
          waitTill = 0;
          Serial.println(&quot;To no zero&quot;);
          seriOne.print(&quot;Hello, world?&quot;);
        }
        Serial.print(&quot;seriTwo: &quot;);
        Serial.print(seriTwo.available());
        Serial.print(&quot; | seriOne: &quot;);
        Serial.println(seriOne.available());
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/arduino-e-led-rgb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino &#8211; Non due o tre. E &#8216;Uno!</title>
		<link>http://blog.ligona.org/articles/arduino-non-due-o-tre-e-uno</link>
		<comments>http://blog.ligona.org/articles/arduino-non-due-o-tre-e-uno#comments</comments>
		<pubDate>Sat, 11 Jun 2011 15:03:35 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Eletrônicos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=113</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2011/06/DSCN5376_-e1307803243575.jpg" alt="" title="Arduino Uno SMD" width="600" height="300" class="alignnone size-full wp-image-128" />]]></description>
			<content:encoded><![CDATA[<p>Incrível como esse pequeno azulado funciona maravilhosamente bem. É simples de entender, é fácil de programar e ele é bastante resistente a erros de eletrônica. Não testei os limites dele (e nem pretendo), mas todas as vezes que fiz algo extremamente errado ele não sofreu dano algum.</p>
<p>Antes de comprar procurei bastante por dicas, tutoriais e manuais enquanto esperava alucinado pela mudança do estatus dos correios. Até que ele chegou!</p>
<p>Aprendi bastante e uma dica que li em muitos lugares e alerto é que <b>o pino 13 nem sempre te resistência</b>! Vi vários exemplos com pessoas ligando um led diretamente ao pino 13 e ao Gnd que está ao lado, mas visivelmente ele não tem resistencia, o led SMD imbutido quase desliga quando se conecta um led dessa forma. Pelo menos na versão SMD que é  que tenho agora o pino é exatamente como o 12, não é PWM e não tem resistência.</p>
<p><em>E ancora una cosa:<br />
Non due o tre. E &#8216;Uno!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/arduino-non-due-o-tre-e-uno/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expressões Regulares e Unicode</title>
		<link>http://blog.ligona.org/articles/expressoes-regulares-e-unicode</link>
		<comments>http://blog.ligona.org/articles/expressoes-regulares-e-unicode#comments</comments>
		<pubDate>Sat, 30 Apr 2011 18:30:23 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[japonês]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=70</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2011/04/800px-Eagle_Owl_IMG_9203-e1304174222949.jpg" alt="" title="RegExp Coruja Águia" width="600" height="229" class="alignnone size-full wp-image-71" />]]></description>
			<content:encoded><![CDATA[<p>Quando estava desenvolvendo o <a title="kanji.ligona.org" href="http://kanji.ligona.org" target="_blank">Mainichi Kanji</a> escolhi o <a title="www.codeigniter.com" href="http://codeigniter.com" target="_blank">Codeigniter</a> como ferramenta para me auxiliar e decidi fazer tudo como manda a regra me deparei com um problema as URL amigáveis não podiam ser a leitura dos kanji ou sua tradução, e mesmo o ID deles do banco de dados não era o suficiente, isso me faria ter que adicionar todos os kanji na expressão regular que o Codeigniter usa para validar os endereços.</p>
<h3>O problema:</h3>
<p>Eu não poderia adicionar um a um os kanji, hiragana e katakana (os 3 alfabetos japoneses) na expressão regular, os alfabetos katakana e hiragana tem juntos cerca de 400 caracteres e os kanjis passam dos 8 mil! Mesmo considerando apenas os 1945 oficiais ainda seria trabalho demais adicionar um a um manualmente. No melhor dos casos uns 2400 caracteres.<br />
Além disso os caracteres não funcionavam sempre corretamente se simplesmente colocados diretamente na expressão. (ex.: /[あいうえお]+/)</p>
<h3>A solução:</h3>
<p>Depois de muito pesquisar descobri que era possível usar os caracteres em unicode dentro de expressões em php e ainda utilizar esses caracteres para grupos com <em>range</em> como [a-z] em unicode [\x{0061}-\x{007A}] . Para encontrar os caracteres e ranges que eu queria bastou pesquisas um pouco, há várias fontes com a lista completa ou só explicativas como na <a title="Wikipedia | Plane Unicode" href="http://en.wikipedia.org/wiki/Plane_(Unicode)" target="_blank">Wikipedia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/expressoes-regulares-e-unicode/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Transformação XSL de XML via PHP</title>
		<link>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-php</link>
		<comments>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-php#comments</comments>
		<pubDate>Wed, 27 Apr 2011 04:56:44 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsl]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=31</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2010/12/ornitorrincos-e1304141778944.jpg" alt="" title="PHP MYSQL Ornitorrinco" width="600" height="229" class="alignnone size-full wp-image-64" />]]></description>
			<content:encoded><![CDATA[<p>Estudando as possibilidades do XML acabei descobrindo mais um uso que achei fantástico (para quem não viu o outro está aqui: <a href="/articles/transformacao-xsl-de-xml-via-jquery/">xml+xsl com jquery</a>. A possibilidade de transformar um arquivo XML com XSL diretamente via PHP, serve tanto para todo o site como para partes dele.<br />
Só coloco duas resalvas, tags como &lt;br /&gt; e &lt;img /&gt; não são fechadas como deve ser em XHTML (ficam &lt;br&gt; e &lt;img&gt;), ainda não descobri um modo de fazer isso ser automático, faço a substituição usando preg_replace.</p>
<div class="fvch-code">
<pre class="fvch-line-numbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre>
<pre><span class="php"><span class="php-comment">// carrega arquivo XML
</span>
<span class="php-var">$arquivo_xml</span> <span class="php-operator">=</span> <span class="php-function">file_get_contents</span><span class="php-brackets">(</span><span class="php-brackets">)</span>;

<span class="php-comment">// objeto xml
</span>
<span class="php-var">$xml</span> <span class="php-operator">=</span> <span class="php-keyword">new</span> DOMDocument<span class="php-brackets">(</span><span class="php-brackets">)</span>;
<span class="php-var">$xml</span><span class="php-operator">-</span><span class="php-operator">&amp;</span>gt;loadXML<span class="php-brackets">(</span><span class="php-var">$arquivo_xml</span><span class="php-brackets">)</span>;

<span class="php-comment">// carrega objeto xslt
</span>
<span class="php-var">$xslt</span> <span class="php-operator">=</span> <span class="php-keyword">new</span> XSLTProcessor<span class="php-brackets">(</span><span class="php-brackets">)</span>;

<span class="php-comment">// carrega objeto XML para o arquivo XSL
</span>
<span class="php-var">$xsl</span> <span class="php-operator">=</span> <span class="php-keyword">new</span> DOMDocument<span class="php-brackets">(</span><span class="php-brackets">)</span>;
<span class="php-var">$xsl</span><span class="php-operator">-</span><span class="php-operator">&amp;</span>gt;load<span class="php-brackets">(</span><span class="php-string">'xsl/index.xsl'</span>, LIBXML_NOCDATA<span class="php-brackets">)</span>;

<span class="php-var">$xslt</span><span class="php-operator">-</span><span class="php-operator">&amp;</span>gt;importStylesheet<span class="php-brackets">(</span><span class="php-var">$xsl</span><span class="php-brackets">)</span>;

<span class="php-comment">// escreve o arquivo transformado
</span>
<span class="php-keyword">echo</span> <span class="php-var">$xslt</span><span class="php-operator">-</span><span class="php-operator">&amp;</span>gt;transformToXML<span class="php-brackets">(</span><span class="php-var">$xml</span><span class="php-brackets">)</span>;</span></pre>
</div>
<p>Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformação XSL de XML via jQuery</title>
		<link>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-jquery</link>
		<comments>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-jquery#comments</comments>
		<pubDate>Tue, 07 Dec 2010 00:22:43 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsl]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://blog.ligona.org/?p=1</guid>
		<description><![CDATA[<img src="http://blog.ligona.org/wp-content/uploads/2011/04/1244166237CYX5eUP-e1304141916982.jpg" alt="" title="XSLT Doninha" width="600" height="229" class="alignnone size-full wp-image-61" />]]></description>
			<content:encoded><![CDATA[<p>Desde que descobri a existência de arquivos XSL(T) sempre adorei poder fazer a integração apenas uma vez e a integração com o sistema. Deixando para mais tarde a integração com o layout, ou mesmo a mudança de layout é bastante simplificada tendo em conta que não é preciso entender o que <em>if</em>s e <em>for</em>s fazem em cada contexto. Mesmo que bem comentado sempre dá algum trabalho.<br />
Lógicamente também é bem facilitada a alteração de layout.</p>
<p>Maaas, e quando você tem um XML para ser requisitado e inserido via ajax no HTML já formatado? O trabalho que se tem fazendo o javascript interpretar o XML seria impressionantemente desnecessário se possível usar XSL, e advinhe só? É possível!<br />
A minha solução é essa, um plugin de jQuery bem simples de usar.</p>
<p>O arquivo <strong>jquery.woh_xslt.js</strong>:</p>
<div class="fvch-code">
<pre class="fvch-line-numbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
</pre>
<pre><span class="js">;<span class="js-bracket">(</span><span class="js-function-keyword">function</span><span class="js-bracket">(</span>$<span class="js-bracket">)</span><span class="js-bracket">{</span>
<span class="js-comment">/*******************************************************************************************/</span>
<span class="js-comment">// jquery.woh_xslt.js - version 0.1
</span>
<span class="js-comment">// A jQuery plugin for ajax XML+XSLT integration on XHTML Documents
</span>
<span class="js-comment">//
</span>
<span class="js-comment">// Copyright (c) 2010, William Ochetski Hellas (http://ligona.org)
</span>
<span class="js-comment">// Liscensed under the MIT License (MIT-LICENSE.txt)
</span>
<span class="js-comment">// http://www.opensource.org/licenses/mit-license.php
</span>
<span class="js-comment">// Created: 2010-05-08 | Updated: 2010-05-08
</span>
<span class="js-comment">/*******************************************************************************************/</span>
$.fn.woh_xslt <span class="js-operator">=</span> <span class="js-function-keyword">function</span><span class="js-bracket">(</span><span class="js-client-keyword">options</span><span class="js-bracket">)</span><span class="js-bracket">{</span>
<span class="js-comment">// Setup default option values
</span>
<span class="js-reserved-keyword">var</span> defaults <span class="js-operator">=</span> <span class="js-bracket">{</span>
xml <span class="js-operator">:</span> <span class="js-reserved-keyword">null</span>,
xsl <span class="js-operator">:</span> <span class="js-reserved-keyword">null</span>
<span class="js-bracket">}</span>;
<span class="js-reserved-keyword">var</span> <span class="js-client-keyword">options</span> <span class="js-operator">=</span> $.extend<span class="js-bracket">(</span>defaults, <span class="js-client-keyword">options</span><span class="js-bracket">)</span>;
<span class="js-comment">// Helpers values
</span>
<span class="js-reserved-keyword">var</span> _$meta;
<span class="js-reserved-keyword">var</span> $page_container;
<span class="js-reserved-keyword">return</span> <span class="js-reserved-keyword">this</span>.each<span class="js-bracket">(</span><span class="js-function-keyword">function</span><span class="js-bracket">(</span><span class="js-bracket">)</span><span class="js-bracket">{</span>
$page_container <span class="js-operator">=</span> $<span class="js-bracket">(</span><span class="js-reserved-keyword">this</span><span class="js-bracket">)</span>;
_$meta <span class="js-operator">=</span> $page_container;
<span class="js-comment">// Initialise meta data
</span>

<span class="js-reserved-keyword">if</span><span class="js-bracket">(</span><span class="js-client-keyword">options</span>.xml <span class="js-operator">=</span><span class="js-operator">=</span><span class="js-operator">=</span> <span class="js-reserved-keyword">null</span> <span class="js-operator">|</span><span class="js-operator">|</span> <span class="js-client-keyword">options</span>.xsl <span class="js-operator">=</span><span class="js-operator">=</span><span class="js-operator">=</span> <span class="js-reserved-keyword">null</span><span class="js-bracket">)</span>
<span class="js-reserved-keyword">return</span> <span class="js-reserved-keyword">false</span>;
<span class="js-reserved-keyword">var</span> _returned <span class="js-operator">=</span> <span class="js-string">''</span>;
_returned <span class="js-operator">=</span> _woh_xslt_result<span class="js-bracket">(</span><span class="js-bracket">)</span>;
<span class="js-comment">// loop for damn IE bug
</span>
<span class="js-reserved-keyword">while</span><span class="js-bracket">(</span>_returned <span class="js-operator">=</span><span class="js-operator">=</span> <span class="js-string">''</span><span class="js-bracket">)</span>
<span class="js-reserved-keyword">continue</span>;
$page_container.html<span class="js-bracket">(</span>_returned<span class="js-bracket">)</span>;
<span class="js-bracket">}</span><span class="js-bracket">)</span>;
<span class="js-function-keyword">function</span> _woh_xslt_load<span class="js-bracket">(</span>file_name<span class="js-bracket">)</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">if</span><span class="js-bracket">(</span><span class="js-client-keyword">window</span>.XMLHttpRequest<span class="js-bracket">)</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">var</span> _xhttp <span class="js-operator">=</span> <span class="js-reserved-keyword">new</span> XMLHttpRequest<span class="js-bracket">(</span><span class="js-bracket">)</span>;
<span class="js-bracket">}</span>
<span class="js-reserved-keyword">else</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">var</span> _xhttp <span class="js-operator">=</span> <span class="js-reserved-keyword">new</span> ActiveXObject<span class="js-bracket">(</span><span class="js-string">&quot;Microsoft.XMLHTTP&quot;</span><span class="js-bracket">)</span>;
<span class="js-bracket">}</span>
_xhttp.<span class="js-client-keyword">open</span><span class="js-bracket">(</span><span class="js-string">&quot;GET&quot;</span>, arguments<span class="js-bracket">[</span><span class="js-number">0</span><span class="js-bracket">]</span>, <span class="js-reserved-keyword">false</span><span class="js-bracket">)</span>;
_xhttp.send<span class="js-bracket">(</span><span class="js-string">&quot;&quot;</span><span class="js-bracket">)</span>;
<span class="js-reserved-keyword">return</span> _xhttp.responseXML;
<span class="js-bracket">}</span>;
<span class="js-function-keyword">function</span> _woh_xslt_result<span class="js-bracket">(</span><span class="js-bracket">)</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">var</span> _xml <span class="js-operator">=</span> _woh_xslt_load<span class="js-bracket">(</span><span class="js-client-keyword">options</span>.xml<span class="js-bracket">)</span>;
<span class="js-reserved-keyword">var</span> _xsl <span class="js-operator">=</span> _woh_xslt_load<span class="js-bracket">(</span><span class="js-client-keyword">options</span>.xsl<span class="js-bracket">)</span>;
<span class="js-comment">// code for Mozilla, Firefox, Opera, etc.
</span>
<span class="js-reserved-keyword">if</span><span class="js-bracket">(</span><span class="js-client-keyword">document</span>.implementation <span class="js-operator">&amp;</span>amp;<span class="js-operator">&amp;</span>amp; <span class="js-client-keyword">document</span>.implementation.createDocument<span class="js-bracket">)</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">var</span> xsltProcessor <span class="js-operator">=</span> <span class="js-reserved-keyword">new</span> XSLTProcessor<span class="js-bracket">(</span><span class="js-bracket">)</span>;
xsltProcessor.importStylesheet<span class="js-bracket">(</span>_xsl<span class="js-bracket">)</span>;
<span class="js-reserved-keyword">return</span> xsltProcessor.transformToFragment<span class="js-bracket">(</span>_xml, <span class="js-client-keyword">document</span><span class="js-bracket">)</span>;
<span class="js-bracket">}</span>
<span class="js-comment">// code for damn IE
</span>
<span class="js-reserved-keyword">else</span> <span class="js-reserved-keyword">if</span><span class="js-bracket">(</span><span class="js-client-keyword">window</span>.ActiveXObject<span class="js-bracket">)</span>
<span class="js-bracket">{</span>
<span class="js-reserved-keyword">return</span> _xml.transformNode<span class="js-bracket">(</span>_xsl<span class="js-bracket">)</span>;
<span class="js-bracket">}</span>
<span class="js-bracket">}</span>;
<span class="js-bracket">}</span>;
<span class="js-bracket">}</span><span class="js-bracket">)</span><span class="js-bracket">(</span>jQuery<span class="js-bracket">)</span>;</span></pre>
</div>
<p>O método de uso é o seguinte:</p>
<div class="fvch-code">
<pre class="fvch-line-numbers">1
2
3
4
5
6
7
8
9
</pre>
<pre><span class="html"><span class="html-script-element">&lt;script type=<span class="html-attribute">&quot;text/javascript&quot;</span>&gt;<span class="js"><span class="js"><span class="js-comment">// &lt;![CDATA[
</span>
$<span class="js-bracket">(</span><span class="js-function-keyword">function</span><span class="js-bracket">(</span><span class="js-bracket">)</span><span class="js-bracket">{</span>
	$<span class="js-bracket">(</span><span class="js-string">'#selector'</span><span class="js-bracket">)</span>.woh_xslt<span class="js-bracket">(</span><span class="js-bracket">{</span>xml<span class="js-operator">:</span><span class="js-string">'file.xml'</span>, xsl<span class="js-operator">:</span><span class="js-string">'file.xsl'</span><span class="js-bracket">}</span><span class="js-bracket">)</span>;
<span class="js-bracket">}</span><span class="js-bracket">)</span>;
<span class="js-comment">// ]]&gt;</span></span></span>&lt;/script&gt;</span></span></pre>
</div>
<p>Este código vai carregar o <em>file.xml</em> e o <em>file.xsl</em> via ajax e transformar os dados do XML. Assim que a transformação estiver terminada incluirá na parte do HTML selecionada, no exemplo, onde <em>id=&#8217;selector&#8217;</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ligona.org/articles/transformacao-xsl-de-xml-via-jquery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

