2016-08-25 10 views
0

Итак, у меня есть эта проприетарная база данных, которая может извергать некоторый хорошо сформированный XML.Написание XSLT для синтеза документов OpenOffice из некоторой базы данных

Я хочу, чтобы XSLT дерьмо из некоторых записей, чтобы получить документы OpenOffice, достаточно приятные, чтобы угодить секретарю, быть подписанным большим боссом и отправляться как официальная корпоративная почтальон. С юридической точки зрения так лучше быть точным. Результирующий документ довольно прост, ваше среднее деловое письмо, возможно, стол или два, две страницы в самом лучшем случае. Не спрашивайте меня, почему они все еще используют уличную почту.

Я вижу, что документы OpenOffice - это, конечно же, XML. (MS Office тоже может быть, это вариант, но я буду придерживаться OO на данный момент).

Мой опыт работы с XSLT не идет намного дальше, чем базовые учебные пособия, несколько лет назад.

Я быстро проверил сеть в поисках OOo DTD, и это более неуловимо, чем я думал.

Я был бы признателен за некоторые указания, чтобы начать меня.

1/Где эти проклятые OpenDefice DTD?

2/Должно быть, есть пример XSLT по OOo. Знаете ли вы?

3/Что было бы правильным, хотя процесс? Конечно, я мог разобрать исходный XML и генерировать результат «на лету», элемент за элементом, но это было бы утомительно, и я бы предпочел не идти таким путем. Моя забота здесь заключается в том, чтобы найти способ написать подходящую таблицу стилей XSLT. С чего начать?

Чтобы дать все это немного вещества, , пожалуйста, приложите упрощенный макет исходного XML.

<document> 
    <metadata>Don't care</metadata> 
    <body> 
     <sendto> 
      <person>Mrs Jane Doe</person> 
      <street>Pensylvania Av.</street> 
      <number>1234</number> 
      <zip>QLD-56789</zip> 
      <city>Brisbane</city> 
     </sendto> 
     <placedate>Bumfuck, AZ, march 29th 2017</placedate> 
     <subject> 
      Our order # 
      <ordernumber>G-27b/6</ordernumber> 
     </subject> 
     <phrases> 
      <phrase>blah</phrase> 
      <phrase>bleh</phrase> 
     </phrases> 
     <order> 
      <item> 
       <reference>42</reference> 
       <name>Bath towel</name> 
       <unitprice>4.2</unitprice> 
       <quantity>20.0</quantity> 
       <totalprice>84.0</totalprice> 
      </item> 
      <item>...</item> 
      ... 
      <item>...</item> 
      <totalprice>1024.0</totalprice> 
     </order> 
     <deliverto> 
      <person>...</person> 
      <street etc.></street> 
     </deliverto> 
     <phrases> 
      <phrase>...</phrase> 
      <phrase>Thx, ciao</phrase> 
     </phrases> 
     <signature> 
      <person>Zap Branigan</person> 
      <title>Director of corporate stuffs</title> 
     </signature> 
    </body> 
</document> 
+0

Вы прочитали: https://en.wikipedia.org/wiki/Office_Open_XML_file_formats? –

+0

У меня нет, и мне стыдно, и я это сделаю. Спасибо, это именно те начинающие, которых я ищу. –

+0

Ну, так что вы должны :-) Обратите внимание на то, что документы OOXML являются «* ZIP-файлами, содержащими XML и другие файлы данных», - и как таковые не могут быть созданы только XSLT. Но посмотрите также: https://en.wikipedia.org/wiki/Microsoft_Office_XML_formats –

ответ

1

В случае, если кому-то это интересно, вот что я до сих пор понял. Кстати, исходной базой данных является Lotus Domino. Чтобы упростить ситуацию, я быстро разработал очень простую основу, касающуюся «вещей», которые имеют форму, цвет и размер. Три поля, это начало.

Я использовал LibreOffice. Он имеет собственный вариант сохранения и чтения документов в виде плоского XML (.fodt), которого нет в OpenOffice. Для дизайна и преобразования старый добрый Notepad ++ с надстройкой «XML Tools».

1/свеже экспортируется XML

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="shapeshifter.xsl"?> 
<document xmlns="http://www.lotus.com/dxl" version="9.0" maintenanceversion="1.0" replicaid="C125801D0049FEC5" form="Thingy"> 
    <noteinfo noteid="8f6" unid="25031389A7D0B3E4C125801D004B9E77" sequence="8"> 
     <created> 
      <datetime dst="true">20160828T154557,67+02</datetime> 
     </created> 
     <modified> 
      <datetime dst="true">20160828T160525,82+02</datetime> 
     </modified> 
     <revised> 
      <datetime dst="true">20160828T160525,81+02</datetime> 
     </revised> 
     <lastaccessed> 
      <datetime dst="true">20160828T160525,82+02</datetime> 
     </lastaccessed> 
     <addedtofile> 
      <datetime dst="true">20160828T154610,89+02</datetime> 
     </addedtofile> 
    </noteinfo> 
    <updatedby> 
     <name>CN=&#xC9;ric/O=Org</name> 
    </updatedby> 
    <revisions> 
     <datetime dst="true">20160828T154610,88+02</datetime> 
     <datetime dst="true">20160828T154724,42+02</datetime> 
     <datetime dst="true">20160828T154926,61+02</datetime> 
     <datetime dst="true">20160828T155209,03+02</datetime> 
     <datetime dst="true">20160828T155257,07+02</datetime> 
     <datetime dst="true">20160828T155950,07+02</datetime> 
     <datetime dst="true">20160828T160018,99+02</datetime> 
    </revisions> 
    <item name="$EncryptionStatus"> 
     <text>0</text> 
    </item> 
    <item name="$SignatureStatus"> 
     <text>0</text> 
    </item> 
    <item name="Shape"> 
     <text>oval</text> 
    </item> 
    <item name="Color"> 
     <text>red</text> 
    </item> 
    <item name="Size"> 
     <text>medium</text> 
    </item> 
</document> 

2/The XSLT

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:d="http://www.lotus.com/dxl" 
     xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
     xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
     > 
    <xsl:output method="xml" encoding="utf-8" version="1.0" media-type="application/xml" indent="yes"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="d:document"/> 
    </xsl:template> 

    <xsl:template match="d:document"> 

     <office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
      xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
      office:version="1.2" 
      office:mimetype="application/vnd.oasis.opendocument.text"> 
      <office:body> 
       <office:text> 
        <text:sequence-decls> 
         <text:sequence-decl text:display-outline-level="0" 
           text:name="Illustration"/> 
         <text:sequence-decl text:display-outline-level="0" 
           text:name="Table"/> 
         <text:sequence-decl text:display-outline-level="0" 
           text:name="Text"/> 
         <text:sequence-decl text:display-outline-level="0" 
           text:name="Drawing"/> 
        </text:sequence-decls> 
        <text:p text:style-name="P1"> 
         <xsl:text>We see here an object whose color is </xsl:text> 
         <xsl:apply-templates select="d:item[@name='Color']"/> 
         <xsl:text> and in the shape of a </xsl:text> 
         <xsl:apply-templates select="d:item[@name='Shape']"/> 
         <xsl:text>. Note the </xsl:text> 
         <xsl:apply-templates select="d:item[@name='Size']"/> 
         <xsl:text> size.</xsl:text>  
        </text:p> 
       </office:text> 
      </office:body> 
     </office:document>   

    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:text>A thing.&#10;</xsl:text> 
    </xsl:template> 
    <xsl:template match="d:item[@name='Color']"> 
     <xsl:value-of select="d:text"/> 
    </xsl:template> 
    <xsl:template match="d:item[@name='Shape']"> 
     <xsl:value-of select="d:text"/> 
    </xsl:template> 
    <xsl:template match="d:item[@name='Size']"> 
     <xsl:value-of select="d:text"/> 
    </xsl:template> 
</xsl:stylesheet> 

3/Выход

<?xml version="1.0" encoding="utf-8"?> 
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:d="http://www.lotus.com/dxl" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> 
    <office:body> 
    <office:text> 
     <text:sequence-decls> 
     <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> 
     <text:sequence-decl text:display-outline-level="0" text:name="Table"/> 
     <text:sequence-decl text:display-outline-level="0" text:name="Text"/> 
     <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> 
     </text:sequence-decls> 
     <text:p text:style-name="P1">We see here an object whose color is red and in the shape of a oval. Note the medium size.</text:p> 
    </office:text> 
    </office:body> 
</office:document> 

Результат может быть сохранен как something.fodt и непосредственно открыт LibreOffice.

Следующие шаги:

  • автоматизируют процесс так, что, с точки зрения пользователя, все это происходит сразу по нажатию кнопки.

  • Другие работы по шаблону xsl. Реальный документ Domino намного сложнее, чем при многоуровневом вложении и многих других типах элементов.

  • и, конечно, все дело в том, чтобы создать хорошо отформатированный документ, так что будет больше копаться в тонкостях Оазис ОТД ...

Но по крайней мере теперь у меня есть доказательство концепции и наброска метода.

 Смежные вопросы

  • Нет связанных вопросов^_^