<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;CE8BRH0_eyp7ImA9WxFREU8.&quot;'><id>tag:blogger.com,1999:blog-3982622479598519588</id><updated>2010-04-24T19:27:35.343+04:00</updated><title>Записки ораклиста</title><subtitle type='html'>Об Oracle DB и сопутствующих технологиях, Java, XML, XSL, Web Services, Телекоммуникациях</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oracle-notepad.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3982622479598519588/posts/default?redirect=false&amp;v=2'/><link rel='alternate' type='text/html' href='http://oracle-notepad.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>PWS</name><uri>http://www.blogger.com/profile/08929189073836369741</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry gd:etag='W/&quot;DUcFSHo9eyp7ImA9WxFREEQ.&quot;'><id>tag:blogger.com,1999:blog-3982622479598519588.post-9092750258386967709</id><published>2010-04-24T12:03:00.004+04:00</published><updated>2010-04-24T12:16:59.463+04:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-04-24T12:16:59.463+04:00</app:edited><title>Converting XML to CSV through XSL</title><content type='html'>В интернете достаточно примеров по преобразованию &lt;span style="font-weight: bold;"&gt;XML&lt;/span&gt; в &lt;span style="font-weight: bold;"&gt;CSV&lt;/span&gt; по средствам &lt;span style="font-weight: bold;"&gt;XSL&lt;/span&gt;, но все они заточены под американские стандарты, т.е. тупо значения, с запятой в качестве разделителя. Мне нужно было получить значения в двойных ковычках, с разделителем ";" и если в тексте встречается двойная ковычка, то она должна заменяться на две двойных ковычки. Подробности &lt;a href="http://ru.wikipedia.org/wiki/CSV"&gt;о CSV в википедии&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Исходный XML:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="windows-1251"?&amp;gt;&lt;br /&gt;&amp;lt;catalog&amp;gt;&lt;br /&gt;       &amp;lt;cd&amp;gt;&lt;br /&gt;               &amp;lt;title&amp;gt;Empire "Burlesque"&amp;lt;/title&amp;gt;&lt;br /&gt;               &amp;lt;artist&amp;gt;Bob Dylan&amp;lt;/artist&amp;gt;&lt;br /&gt;               &amp;lt;country&amp;gt;USA&amp;lt;/country&amp;gt;&lt;br /&gt;               &amp;lt;company&amp;gt;&amp;amp;quot;Columbia&amp;amp;quot;&amp;lt;/company&amp;gt;&lt;br /&gt;               &amp;lt;price&amp;gt;10.90&amp;lt;/price&amp;gt;&lt;br /&gt;               &amp;lt;year&amp;gt;1985&amp;lt;/year&amp;gt;&lt;br /&gt;       &amp;lt;/cd&amp;gt;&lt;br /&gt;       &amp;lt;cd&amp;gt;&lt;br /&gt;               &amp;lt;title&amp;gt;Hide your heart&amp;lt;/title&amp;gt;&lt;br /&gt;               &amp;lt;artist&amp;gt;Bonnie Tyler&amp;lt;/artist&amp;gt;&lt;br /&gt;               &amp;lt;country&amp;gt;UK&amp;lt;/country&amp;gt;&lt;br /&gt;               &amp;lt;company&amp;gt;CBS Records&amp;lt;/company&amp;gt;&lt;br /&gt;               &amp;lt;price&amp;gt;9.90&amp;lt;/price&amp;gt;&lt;br /&gt;               &amp;lt;year&amp;gt;1988&amp;lt;/year&amp;gt;&lt;br /&gt;       &amp;lt;/cd&amp;gt;&lt;br /&gt;       &amp;lt;cd&amp;gt;&lt;br /&gt;               &amp;lt;title&amp;gt;Greatest Hits&amp;lt;/title&amp;gt;&lt;br /&gt;               &amp;lt;artist&amp;gt;Dolly Parton&amp;lt;/artist&amp;gt;&lt;br /&gt;               &amp;lt;country&amp;gt;USA&amp;lt;/country&amp;gt;&lt;br /&gt;               &amp;lt;company&amp;gt;RCA&amp;lt;/company&amp;gt;&lt;br /&gt;               &amp;lt;price&amp;gt;9.90&amp;lt;/price&amp;gt;&lt;br /&gt;               &amp;lt;year&amp;gt;1982&amp;lt;/year&amp;gt;&lt;br /&gt;       &amp;lt;/cd&amp;gt;&lt;br /&gt;       &amp;lt;cd&amp;gt;&lt;br /&gt;               &amp;lt;title&amp;gt;Still got the blues&amp;lt;/title&amp;gt;&lt;br /&gt;               &amp;lt;artist&amp;gt;Gary Moore&amp;lt;/artist&amp;gt;&lt;br /&gt;               &amp;lt;country&amp;gt;UK&amp;lt;/country&amp;gt;&lt;br /&gt;               &amp;lt;company&amp;gt;Virgin records&amp;lt;/company&amp;gt;&lt;br /&gt;               &amp;lt;price&amp;gt;10.20&amp;lt;/price&amp;gt;&lt;br /&gt;               &amp;lt;year&amp;gt;1990&amp;lt;/year&amp;gt;&lt;br /&gt;       &amp;lt;/cd&amp;gt;&lt;br /&gt;       &amp;lt;cd&amp;gt;&lt;br /&gt;               &amp;lt;title&amp;gt;Eros&amp;lt;/title&amp;gt;&lt;br /&gt;               &amp;lt;artist&amp;gt;Eros Ramazzotti&amp;lt;/artist&amp;gt;&lt;br /&gt;               &amp;lt;country&amp;gt;EU&amp;lt;/country&amp;gt;&lt;br /&gt;               &amp;lt;company&amp;gt;BMG&amp;lt;/company&amp;gt;&lt;br /&gt;               &amp;lt;price&amp;gt;9.90&amp;lt;/price&amp;gt;&lt;br /&gt;               &amp;lt;year&amp;gt;1997&amp;lt;/year&amp;gt;&lt;br /&gt;       &amp;lt;/cd&amp;gt;&lt;br /&gt;&amp;lt;/catalog&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;XSL шаблон:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;xsl:output method=&amp;quot;text&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:variable name=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;xsl:text&amp;gt;&amp;quot;&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name=&amp;quot;dqt&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;xsl:text&amp;gt;&amp;quot;&amp;quot;&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match=&amp;quot;/catalog&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;xsl:apply-templates select=&amp;quot;cd&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match=&amp;quot;cd&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;xsl:value-of select=&amp;quot;$qt&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:call-template name=&amp;quot;replace-substring&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;xsl:with-param name=&amp;quot;original&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;xsl:with-param name=&amp;quot;substring&amp;quot; select=&amp;quot;$qt&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;xsl:with-param name=&amp;quot;replacement&amp;quot; select=&amp;quot;$dqt&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;     &amp;lt;xsl:value-of select=&amp;quot;$qt&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;xsl:text&amp;gt;;&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;  &amp;lt;xsl:text&amp;gt;&amp;amp;#13;&amp;amp;#10;&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;xsl:template name=&amp;quot;replace-substring&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name=&amp;quot;original&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name=&amp;quot;substring&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name=&amp;quot;replacement&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;      &amp;lt;xsl:when test=&amp;quot;contains($original, $substring)&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of&lt;br /&gt;          select=&amp;quot;substring-before($original, $substring)&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of select=&amp;quot;$replacement&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name=&amp;quot;replace-substring&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;xsl:with-param name=&amp;quot;original&amp;quot;&lt;br /&gt;            select=&amp;quot;substring-after($original, $substring)&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;xsl:with-param&lt;br /&gt;            name=&amp;quot;substring&amp;quot; select=&amp;quot;$substring&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;xsl:with-param&lt;br /&gt;            name=&amp;quot;replacement&amp;quot; select=&amp;quot;$replacement&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;        &amp;lt;xsl:value-of select=&amp;quot;$original&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;И результат:&lt;br /&gt;&lt;pre class="CSS" name="code"&gt;&lt;br /&gt;"Empire ""Burlesque""";"Bob Dylan";"USA";"""Columbia""";"10.90";"1985"&lt;br /&gt;"Hide your heart";"Bonnie Tyler";"UK";"CBS Records";"9.90";"1988"&lt;br /&gt;"Greatest Hits";"Dolly Parton";"USA";"RCA";"9.90";"1982"&lt;br /&gt;"Still got the blues";"Gary Moore";"UK";"Virgin records";"10.20";"1990"&lt;br /&gt;"Eros";"Eros Ramazzotti";"EU";"BMG";"9.90";"1997"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3982622479598519588-9092750258386967709?l=oracle-notepad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracle-notepad.blogspot.com/feeds/9092750258386967709/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://oracle-notepad.blogspot.com/2010/04/xml-csv-xsl.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3982622479598519588/posts/default/9092750258386967709?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3982622479598519588/posts/default/9092750258386967709?v=2'/><link rel='alternate' type='text/html' href='http://oracle-notepad.blogspot.com/2010/04/xml-csv-xsl.html' title='Converting XML to CSV through XSL'/><author><name>PWS</name><uri>http://www.blogger.com/profile/08929189073836369741</uri><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='10614453253942516144'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;D04HQ3wzeSp7ImA9WxFREUw.&quot;'><id>tag:blogger.com,1999:blog-3982622479598519588.post-7234665398346462847</id><published>2009-04-26T20:33:00.009+05:00</published><updated>2010-04-24T17:32:12.281+04:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-04-24T17:32:12.281+04:00</app:edited><title>ORA-01033: ORACLE initialization or shutdown in progress</title><content type='html'>&lt;span style="font-family:arial;"&gt;Ситуация была такая:&lt;br /&gt;Oracle 11g на WinXP. Отрубилось питание у компа. После перезагрузки любая попытка входа в базу заканчивается ошибкой ora-01033(кроме sys):&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;&lt;br /&gt;C:\Documents and Settings\PWS&gt;sqlplus scott/tiger@wind&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.6.0 - Production on Sun Apr 26 16:32:47 2009&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2007, Oracle. All rights reserved.&lt;br /&gt;&lt;br /&gt;ERROR:&lt;br /&gt;ORA-01033: ORACLE initialization or shutdown in progress&lt;br /&gt;Process ID: 0&lt;br /&gt;Session ID: 0 Serial number: 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enter user-name:&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-family:arial;"&gt;Помогло следующее:&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;&lt;br /&gt;C:\Documents and Settings\PWS&gt;sqlplus sys@wind as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.6.0 - Production on Sun Apr 26 16:55:33 2009&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2007, Oracle. All rights reserved.&lt;br /&gt;&lt;br /&gt;Enter password:&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&gt; recover database;&lt;br /&gt;Media recovery complete.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;и рестарт базы.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3982622479598519588-7234665398346462847?l=oracle-notepad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracle-notepad.blogspot.com/feeds/7234665398346462847/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://oracle-notepad.blogspot.com/2009/04/ora-01033-oracle-initialization-or.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3982622479598519588/posts/default/7234665398346462847?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3982622479598519588/posts/default/7234665398346462847?v=2'/><link rel='alternate' type='text/html' href='http://oracle-notepad.blogspot.com/2009/04/ora-01033-oracle-initialization-or.html' title='ORA-01033: ORACLE initialization or shutdown in progress'/><author><name>PWS</name><uri>http://www.blogger.com/profile/08929189073836369741</uri><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='10614453253942516144'/></author><thr:total>0</thr:total></entry></feed>