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

Я невелик знаток 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
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
    #37173499
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
    #37173597
kaznelson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
    #37173711
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
    #37173824
kaznelson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Период между сообщениями больше года.
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
    #37893941
Sergii1950
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный подход к решению прикладной задачи. Пробую по аналогии - не получается.
имеем такой файл 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
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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