所以我有这个传统的专有数据库,它可以发出一些结构良好的XML。
我想从某些记录中获取XSLT以获取OpenOffice文档,以便取悦秘书,由大老板签名并作为官方公司蜗牛邮件发送。具有法律约束力的确如此更好。生成的文档非常简单,您的平均商业信函可能有一两个表,最多两页。不要问我为什么他们仍然使用蜗牛邮件。
我看到OpenOffice文档当然也是XML。 (MS Office也许,这是一个选择,但我现在会坚持OO)。
几年前,我对XSLT的体验远远超过基本教程。
我在网上搜索OOo DTD时非常敏捷,而且比我想象的还要难以捉摸。
我很欣赏一些让我入门的建议。
1 /那些该死的OpenOffice 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 :(得分:1)
如果有人有兴趣,这是我到目前为止所做的。顺便说一句,源数据库是Lotus Domino。为了简化事情,我迅速设计了一个非常简单的基础来处理&#34;事情&#34;有形状,颜色和大小。三个领域,它是一个开始。
我使用了LibreOffice。它具有保存和读取文档作为平面XML(.fodt)的本机选项,OpenOffice没有。 对于设计和转换,旧的Notepad ++使用&#34; XML工具&#34;插件。
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=É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 / 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. </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文档比这更复杂,具有多层嵌套和更多元素类型。
当然,重点是生成一个结构合理的文档,这样就可以更好地挖掘Oasis DTD的细节......
但至少现在我有概念证明和方法概要。