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

В основном, формируем документы 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
09.08.2016, 16:07
    #39289067
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование документа в LibreOffice с помощью XSLT
давным давно для офиса делали реверс-инжинирингом - простенький документ - болванку с основами форматирования сохраняли в xml, выдалбливали лишнее, прикручивали заголовок, итераторы и пути к данным.... получалось xslt. работало.
...
Рейтинг: 0 / 0
09.08.2016, 18:08
    #39289217
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование документа в LibreOffice с помощью XSLT
Alex-ZZZ,

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

я делал для CALCa всё работает нормально....
...
Рейтинг: 0 / 0
09.08.2016, 18:12
    #39289220
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование документа в LibreOffice с помощью XSLT
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
10.08.2016, 11:23
    #39289503
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование документа в LibreOffice с помощью XSLT
Спасибо всем кто ответил буду смотреть, разбираться.

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

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

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

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


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