powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Формирование документа в LibreOffice с помощью XSLT
7 сообщений из 7, страница 1 из 1
Формирование документа в LibreOffice с помощью XSLT
    #39289010
Alex-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

В основном, формируем документы MSOffice с помощью XML и XSLT 2.0 (word, excel), клиенты начали переходить на бесплатные аналоги (LibreOffice).

Поискал в интернете описания синтаксиса XSLT для LibreOffice - результат не очень.

Может у кого есть рабочие XSLT файлы которые формируют документ в LibreOffice, для изучения. Пока интересует XSLT файлы для LibreOffice для аналога Word, но и для аналога Excel то же пригодятся.

В дополнение может ткните где можно почитать по этому вопросу (желательно на русском, но и английский подойдет).

Спасибо.


Пока смотрю на синтаксис сохраненного в формате fodt и перенесенного в Altov-у файла, пробовал просто открыть его ругается на Root.
Куда его прописать для LibreOffice, для Word было так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" name="Vasya"/>
	<xsl:template match="ROOT">
		<xsl:processing-instruction name="mso-application">progid="Word.Document"</xsl:processing-instruction>
		<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:ns0="http://www.w3.org/2005/xpath-functions" xmlns:ns1="http://www.w3.org/2001/XMLSchema" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
			<w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
			<o:DocumentProperties>



для LibreOffice 5 сформировался так
Код: xml
1.
2.
3.
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
	<office:meta>
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289067
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давным давно для офиса делали реверс-инжинирингом - простенький документ - болванку с основами форматирования сохраняли в xml, выдалбливали лишнее, прикручивали заголовок, итераторы и пути к данным.... получалось xslt. работало.
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289217
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex-ZZZ,

вот тут вот человек всё пишет пошагово...
http://www.cyberforum.ru/blogs/557613/blog3570.html

я делал для CALCa всё работает нормально....
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289220
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex-ZZZ,

первая сторока - это имена тегов, в calce
Код: 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.
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.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" version="2.0" exclude-result-prefixes="office table text config">
  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
  <xsl:variable name="element">
    <xsl:for-each select="//table:table[@table:name = //config:config-item[@config:name = 'ActiveTable']/text()]">
      <xsl:for-each select="table:table-row[position() = 1]/table:table-cell">
        <xsl:if test="normalize-space(.) != ''">
          <xsl:choose>
            <xsl:when test="@table:number-columns-repeated">
              <xsl:variable name="i" select="@table:number-columns-repeated"/>
              <xsl:variable name="x" select="text:p"/>
              <xsl:for-each select="(1 to $i)">
                <xsl:element name="tag">
                  <xsl:value-of select="$x"/>
                </xsl:element>
              </xsl:for-each>
            </xsl:when>
            <xsl:otherwise>
              <xsl:element name="tag">
                <xsl:value-of select="text:p"/>
              </xsl:element>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:if>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:variable>
  <xsl:variable name="y" select="count($element/tag)"/>
  <xsl:template match="/">
    <xsl:element name="root">
      <xsl:apply-templates select="//table:table[@table:name = //config:config-item[@config:name = 'ActiveTable']/text()]"/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="table:table">
    <xsl:for-each select="table:table-row[not(position() = 1)]">
      <xsl:if test="normalize-space(.) != ''">
        <xsl:call-template name="row">
          <xsl:with-param name="data">
            <xsl:for-each select="table:table-cell">
              <xsl:choose>
                <xsl:when test="@table:number-columns-repeated">
                  <xsl:variable name="ii" select="@table:number-columns-repeated"/>
                  <xsl:variable name="xx" select="text:p"/>
                  <xsl:for-each select="(1 to $ii)">
                    <xsl:element name="data">
                      <xsl:value-of select="normalize-space($xx)"/>
                    </xsl:element>
                  </xsl:for-each>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:element name="data">
                    <xsl:for-each select="(text:p)">
                      <xsl:value-of select="normalize-space(.)"/>
                    </xsl:for-each>
                  </xsl:element>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:for-each>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>
  <xsl:template name="row">
    <xsl:param name="data"/>
    <xsl:element name="article">
      <xsl:for-each select="(1 to $y)">
        <xsl:variable name="z" select="position()"/>
        <xsl:variable name="p" select="$element/tag[(position()) = ($z)]"/>
        <xsl:if test="$data/data[(position()) = ($z)] != ''">
          <xsl:element name="{$p}">
            <xsl:value-of select="$data/data[(position()) = ($z)]"/>
          </xsl:element>
        </xsl:if>
      </xsl:for-each>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289503
Alex-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем кто ответил буду смотреть, разбираться.

А еще может кто подскажет можно из одного файла XSLT вызвать другой, например в переменную записать ФИО, вызвать другой файл XSLT который это ФИО поставит в нужный падеж. Если можно с примерами.
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289524
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex-ZZZСпасибо всем кто ответил буду смотреть, разбираться.

А еще может кто подскажет можно из одного файла XSLT вызвать другой, например в переменную записать ФИО, вызвать другой файл XSLT который это ФИО поставит в нужный падеж. Если можно с примерами. https://msdn.microsoft.com/ru-ru/library/ms256465(v=vs.120).aspx
...
Рейтинг: 0 / 0
Формирование документа в LibreOffice с помощью XSLT
    #39289696
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Ему не document() нужен, а
Код: xml
1.
<xsl:import href="...."/>

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


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