Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1) / 6 сообщений из 6, страница 1 из 1
19.03.2011, 13:16
    #37173468
kaznelson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
Уважаемые, подскажите пожалуйста, как можно сделать перевод русского в транслит.

Я невелик знаток XSLT, а посему расскажу предысторию.

Есть такой конвертер для eBook'ов: FB2DocBook. В нём производится трансформация FB2 — DocBook — XSL-FO — PDF|EPUB.
http://kir666.ru/fb2docbook/ или http://www.the-ebook.org/forum/viewtopic.php?t=6794

Результат весьма хороший, но к сожалению автор ( KiR ) в последнее время пропал и энтузиасты допиливают его на форуме the-ebook.org самостоятельно.

Поскольку не все электронные книги нормально понимают русский язык, в конвертере можно произвести транслитерацию метаинфы PDF. Для этого используется утилита pdftk, но есть у неё один минус - если исходный файл FB2 назван по-русски, конвертер вылетит с ошибкой.

Однако docbook-xsl версий старше 1.74 может выводить метаинфу своими силами - но только на языке книги.

В инете я нашёл стандартный шаблон для замены:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<xsl:template name="replace" match="text()" mode="replace">
  <xsl:param name="str"/>
  <xsl:param name="search-for"/>
  <xsl:param name="replace-to"/>
  <xsl:choose>
    <xsl:when test="contains($str, $search-for)">
      <xsl:value-of select="substring-before($str, $search-for)"/>
      <xsl:copy-of select="$replace-to"/>
      <xsl:call-template name="replace">
        <xsl:with-param name="str" select="substring-after($str, $search-for)"/>
        <xsl:with-param name="search-for" select="$search-for"/>
        <xsl:with-param name="replace-to" select="$replace-to"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$str"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

Как его можно прикрутить к шаблону docbook-xsl?
Вот сокращённый фрагмент файла \docbook-xsl\fo\fop1.xsl (версия 1.76.1 - http://docbook.sourceforge.net/ ), ответственный за вывод метаинфы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<!-- Metadata support ("Document Properties" in Adobe Reader) -->
<xsl:template name="fop1-document-information">
  <xsl:variable name="authors" select="(//author|//editor|//corpauthor|//authorgroup)[1]"/>
  <xsl:variable name="title">
    ...
  </xsl:variable>
  <fo:declarations>
    <x:xmpmeta xmlns:x="adobe:ns:meta/">
      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
          <!-- Title -->
          <dc:title><xsl:value-of select="normalize-space($title)"/></dc:title>
          <!-- Author -->
	  <xsl:if test="$authors">
	    <xsl:variable name="author">
	      ...
            </xsl:variable>
            <dc:creator><xsl:value-of select="normalize-space($author)"/></dc:creator>
          </xsl:if>
        </rdf:Description>
      </rdf:RDF>
    </x:xmpmeta>
  </fo:declarations>
</xsl:template>

Замена одинарных символов проблем не вызвала - сделал две переменные и вставил translate в <dc:title> и <dc:creator>:
Код: plaintext
1.
2.
<xsl:variable name="l-rus" select="'абвгдеёзийклмнопрстуфьыъэАБВГДЕЁЗИЙКЛМНОПРСТУФЬЫЪЭ'"/>
<xsl:variable name="l-trans" select="'abvgdeеzijklmnoprstuf`y`eABVGDEEZIJKLMNOPRSTUF`Y`E'"/>
<xsl:value-of select="normalize-space(translate($title,$l-rus,$l-trans))"/>

А вот с двойными-тройными как сделать - не представляю...
...
Рейтинг: 0 / 0
19.03.2011, 13:54
    #37173499
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
kaznelson,

Если проблема с вызовом шаблона, то так: (заменяет "б" на "bb")
Код: plaintext
1.
2.
3.
4.
<xsl:call-template name="replace">
	<xsl:with-param name="str" select="'абвгдеёжз'"/>
	<xsl:with-param name="search-for" select="'б'"/>
	<xsl:with-param name="replace-to" select="'bb'"/>
</xsl:call-template>

PS. Посмотри темку
...
Рейтинг: 0 / 0
19.03.2011, 15:50
    #37173597
kaznelson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
refreg ,

Нет, проблем с вызовом шаблона нет. Вот такой call отрабатывает:
Код: plaintext
1.
2.
3.
4.
5.
6.
          <dc:title>
            <xsl:call-template name="replace">
              <xsl:with-param name="str" select="normalize-space(translate($title,$l-rus,$l-trans))"/>
              <xsl:with-param name="search-for" select="'ж'"/>
              <xsl:with-param name="replace-to" select="'zh'"/>
            </xsl:call-template>
          </dc:title>
Но дело в том, что как и в этом варианте, так и в посоветованной Вами теме - ровно на одно вхождение. А в для транслита нужно как минимум восемь.

Передавать call из <dc:title> много раз - множится область замены, т.е. вместо одной "str" со всеми заменёнными буквами молучаю восемь, в каждой из которой одна замена.

Если передать только параметр "str" в какой-нибудь промежуточный шаблон, а уже в нём обрабатывать все буквы, то всё равно не получается. When напрямую не помогает, т.к. у меня все условия изначально true, и срабатывает первое. А как завернуть, чтобы в шаблон "replace" были переданы все восемь букв по очереди, не могу понять...
...
Рейтинг: 0 / 0
19.03.2011, 18:23
    #37173711
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
kaznelson,

Можно, конечно, повозиться сделать универсальный шаблон для преобразования для двух букв, но данную задачу быстрее в лоб, не красиво - зато работает. (две буквы есть, остальные шесть по аналогии)
Код: plaintext
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.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<!-- -->
	<xsl:variable name="l-rus" select="'абвгдеёзийклмнопрстуфьыъэАБВГДЕЁЗИЙКЛМНОПРСТУФЬЫЪЭ'"/>
	<xsl:variable name="l-trans" select="'abvgdeеzijklmnoprstuf`y`eABVGDEEZIJKLMNOPRSTUF`Y`E'"/>
	<!-- -->
	<xsl:template match="/">
		<root>
			<xsl:variable name="q1" select="'съешь еще этих мягких французских булок'"/>
			<xsl:variable name="q2" select="normalize-space(translate($q1,$l-rus,$l-trans))"/>
			<xsl:variable name="q3">
				<xsl:call-template name="replace">
					<xsl:with-param name="str" select="$q2"/>
					<xsl:with-param name="search-for" select="'ж'"/>
					<xsl:with-param name="replace-to" select="'zh'"/>
				</xsl:call-template>
			</xsl:variable>
			<xsl:variable name="q4">
				<xsl:call-template name="replace">
					<xsl:with-param name="str" select="$q3"/>
					<xsl:with-param name="search-for" select="'ш'"/>
					<xsl:with-param name="replace-to" select="'sh'"/>
				</xsl:call-template>
			</xsl:variable>
			<xsl:value-of select="$q4"/>
		</root>
	</xsl:template>
	<!-- -->
	<xsl:template name="replace">
		...
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
19.03.2011, 20:51
    #37173824
kaznelson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
refreg ,
Громадное спасибо, всё заработало! :)

Универсальный шаблон это конечно хорошо, но и Ваш вариант не хуже, имхо - некомпактно, зато наглядно. Особенно по моим знаниям XSLT; собственно, когда конвертер FB2DocBook начал ковырять, тогда и столкнулся... :)

Вот под спойлером рабочий кусок fop1.xsl для работы с метаинфой в PDF, сделанный по Вашим рекомендациям:
Код: plaintext
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.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
<?xml version=' 1 . 0 '?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version=' 1 . 0 '>
<!-- ****************************************************************
     $Id: fop1.xsl 8913 2010-10-01 04:44:57Z bobstayton $
     ****************************************************************
     This file is part of the XSL DocBook Stylesheet distribution.
     See ../README or http://docbook.sf.net/release/xsl/current/ for
     copyright and other information.
**************************************************************** -->

<!-- ======================================================= -->
<!-- ЗДЕСЬ УБРАН КУСОК, РАБОТАЮЩИЙ С BOOKMARK'АМИ -->
<!-- ======================================================= -->

<!-- Metadata support ("Document Properties" in Adobe Reader) -->
<!-- Подключено преобразование в транслит для метаинфы PDF взамен внешней утилиты PDFTK -->
<!-- Шаблон строковых замен взят из книги "Технология XSLT" Алексея Валикова, -->
<!-- шаблон непосредственного преобразования подсказал refreg с форума SQL.ru -->

<xsl:template name="fop1-document-information">
  <xsl:variable name="authors" select="(//author|//editor|//corpauthor|//authorgroup)[1]"/>

  <!-- Переменные для однобуквенных замен  -->
  <xsl:variable name="l-rus" select="'абвгдеёзийклмнопрстуфьыъэАБВГДЕЁЗИЙКЛМНОПРСТУФЬЫЪЭ'"/>
  <xsl:variable name="l-trans" select="'abvgdeеzijklmnoprstuf`y`eABVGDEEZIJKLMNOPRSTUF`Y`E'"/>

  <xsl:variable name="title">
    <xsl:apply-templates select="/*[1]" mode="label.markup"/>
    <xsl:apply-templates select="/*[1]" mode="title.markup"/>
    <xsl:variable name="subtitle">
      <xsl:apply-templates select="/*[1]" mode="subtitle.markup"/>
    </xsl:variable>
    <xsl:if test="$subtitle !=''">
      <xsl:text> - </xsl:text>
      <xsl:value-of select="$subtitle"/>
    </xsl:if>
  </xsl:variable>

  <fo:declarations>
    <x:xmpmeta xmlns:x="adobe:ns:meta/">
      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
          <!-- Dublin Core properties go here -->

          <!-- Title -->
          <dc:title>
            <!-- Однобуквенная замена и вызов шаблона несколькобуквенных замен  -->
            <xsl:call-template name="replace-string">
              <xsl:with-param name="text-string"
                              select="normalize-space(translate($title,$l-rus,$l-trans))"/>
            </xsl:call-template>
          </dc:title>
          <!-- dc:title><xsl:value-of select="normalize-space($title)"/></dc:title -->

          <!-- Author -->
	  <xsl:if test="$authors">
	    <xsl:variable name="author">
	      <xsl:choose>
		<xsl:when test="$authors[self::authorgroup]">
                  <xsl:call-template name="person.name.list">
                    <xsl:with-param name="person.list" 
                         select="$authors/*[self::author|self::corpauthor|self::othercredit|self::editor]"/>
                  </xsl:call-template>
                </xsl:when>
                <xsl:when test="$authors[self::corpauthor]">
                  <xsl:value-of select="$authors"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:call-template name="person.name">
                    <xsl:with-param name="node" select="$authors"/>
                  </xsl:call-template>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:variable>

            <dc:creator>
              <!-- Однобуквенная замена и вызов шаблона несколькобуквенных замен -->
              <xsl:call-template name="replace-string">
                <xsl:with-param name="text-string"
                                select="normalize-space(translate($author,$l-rus,$l-trans))"/>
              </xsl:call-template>
            </dc:creator>
            <!-- dc:creator><xsl:value-of select="normalize-space($author)"/></dc:creator -->
          </xsl:if>

          <!-- Subject -->
          <xsl:if test="//subjectterm">
            <dc:description>
              <xsl:for-each select="//subjectterm">
                <xsl:value-of select="normalize-space(.)"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
            </dc:description>
          </xsl:if>
        </rdf:Description>

        <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
          <!-- PDF properties go here -->

          <!-- Keywords -->
          <xsl:if test="//keyword">
            <pdf:Keywords>
              <xsl:for-each select="//keyword">
                <xsl:value-of select="normalize-space(.)"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
            </pdf:Keywords>
          </xsl:if>
        </rdf:Description>

        <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
          <!-- XMP properties go here -->

          <!-- Creator Tool -->
          <xmp:CreatorTool>FB2DocBook converter (by KiR)</xmp:CreatorTool>
        </rdf:Description>

      </rdf:RDF>
    </x:xmpmeta>
  </fo:declarations>
</xsl:template>

<!-- Шаблон непосредственного преобразования в транслит -->
<xsl:template name="replace-string" match="text()">
  <xsl:param name="text-string"/>
  <xsl:variable name="m01" select="$text-string"/>

  <xsl:variable name="m02">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m01"/>
      <xsl:with-param name="search-for" select="'ж'"/>
      <xsl:with-param name="replace-to" select="'zh'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m03">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m02"/>
      <xsl:with-param name="search-for" select="'Ж'"/>
      <xsl:with-param name="replace-to" select="'ZH'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m04">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m03"/>
      <xsl:with-param name="search-for" select="'х'"/>
      <xsl:with-param name="replace-to" select="'kh'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m05">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m04"/>
      <xsl:with-param name="search-for" select="'Х'"/>
      <xsl:with-param name="replace-to" select="'KH'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m06">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m05"/>
      <xsl:with-param name="search-for" select="'ц'"/>
      <xsl:with-param name="replace-to" select="'ts'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m07">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m06"/>
      <xsl:with-param name="search-for" select="'Ц'"/>
      <xsl:with-param name="replace-to" select="'TS'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m08">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m07"/>
      <xsl:with-param name="search-for" select="'ч'"/>
      <xsl:with-param name="replace-to" select="'ch'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m09">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m08"/>
      <xsl:with-param name="search-for" select="'Ч'"/>
      <xsl:with-param name="replace-to" select="'CH'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m10">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m09"/>
      <xsl:with-param name="search-for" select="'ш'"/>
      <xsl:with-param name="replace-to" select="'sh'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m11">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m10"/>
      <xsl:with-param name="search-for" select="'Ш'"/>
      <xsl:with-param name="replace-to" select="'SH'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m12">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m11"/>
      <xsl:with-param name="search-for" select="'щ'"/>
      <xsl:with-param name="replace-to" select="'sch'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m13">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m12"/>
      <xsl:with-param name="search-for" select="'Щ'"/>
      <xsl:with-param name="replace-to" select="'SCH'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m14">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m13"/>
      <xsl:with-param name="search-for" select="'ю'"/>
      <xsl:with-param name="replace-to" select="'yu'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m15">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m14"/>
      <xsl:with-param name="search-for" select="'Ю'"/>
      <xsl:with-param name="replace-to" select="'YU'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m16">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m15"/>
      <xsl:with-param name="search-for" select="'я'"/>
      <xsl:with-param name="replace-to" select="'ya'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:variable name="m17">
    <xsl:call-template name="replace">
      <xsl:with-param name="str" select="$m16"/>
      <xsl:with-param name="search-for" select="'Я'"/>
      <xsl:with-param name="replace-to" select="'YA'"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:value-of select="$m17"/>
</xsl:template>

<!-- Общий шаблон строковых замен -->
<xsl:template name="replace" match="text()" mode="replace">
  <xsl:param name="str"/>
  <xsl:param name="search-for"/>
  <xsl:param name="replace-to"/>
  <xsl:choose>
    <xsl:when test="contains($str, $search-for)">
      <xsl:value-of select="substring-before($str, $search-for)"/>
      <xsl:copy-of select="$replace-to"/>
      <xsl:call-template name="replace">
        <xsl:with-param name="str" select="substring-after($str, $search-for)"/>
        <xsl:with-param name="search-for" select="$search-for"/>
        <xsl:with-param name="replace-to" select="$replace-to"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$str"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.07.2012, 15:15
    #37893941
Sergii1950
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
Интересный подход к решению прикладной задачи. Пробую по аналогии - не получается.
имеем такой файл xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="UTF-8"?>
<articles>
     <article>
		<blistpart>Сафонкин С.Н. ТАЭКВОН-ДО. - СПб ГАФК им. П.Ф.Лесгафта, 2001. - 182 с.</blistpart>
		<blistpart>Теоретические основы механики биосистем . В.М. Адашевский. - Харьков: НТУ "ХПИ", 2001.- 258 с.</blistpart>
		<blistpart>Чой Хонг Хи. Таеквон-до. - М., 1993. - 763 с.</blistpart>
		.......................
     </article>
     <article>
     ...............	
     </article>
.............
      </article>
</articles>


и файл xsl
Код: xml
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.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>


  <!-- ТРАНСЛИТЕРАЦИЯ  -->
<xsl:template name="articles">
  <xsl:variable name="blistpart"/>

  <!-- Переменные для однобуквенных замен  -->
  <xsl:variable name="l-rus" select="'абвгдеёзийклмнопрстуфьыъэАБВГДЕЁЗИЙКЛМНОПРСТУФЬЫЪЭ'"/>
  <xsl:variable name="l-trans" select="'abvgdeеzijklmnoprstuf`y`eABVGDEEZIJKLMNOPRSTUF`Y`E'"/>
  
          <dc:blistpart>
            <!-- Однобуквенная замена и вызов шаблона несколькобуквенных замен  -->
            <xsl:call-template name="replace-string">
              <xsl:with-param name="text-string"
                              select="normalize-space(translate($blistpart,$l-rus,$l-trans))"/>
            </xsl:call-template>
          </dc:blistpart>
  
<!-- Шаблон непосредственного преобразования в транслит -->
...............................
    ........................
</xsl:stylesheet>


В итоге - ошибка.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1) / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]