有没有为XML生成XSL的应用程序?

时间:2010-05-15 09:55:14

标签: xml xslt xsl-fo

是否有任何应用程序从XML文件生成XSL样式表?我有一个非常复杂的XML文件,它是一个结构良好的SVG文件。

是否有任何软件应用程序将XML转换为XSL?

5 个答案:

答案 0 :(得分:5)

XSL文件包含有关如何将源XML文件转换为另一种格式的说明(也可能是XML)。因此,如果没有关于如何执行该操作的更多信息,软件就不可能将XML文件转换为XSL样式表。

这就像想要从HTML文件中获取PHP脚本。澄清:php脚本可以生成HTML页面

<html><body>hello world</body></html>

您无法推断原始脚本的外观。它可能是一个简单的echo() - 调用或复杂解码操作的结果等。

从XML到XSL的转换也是如此。您必须自己完成,因为软件无法知道如何将XML结果转换为其底层的XSL转换表。

答案 1 :(得分:2)

根据您的previous question,我假设您要从SVG图像创建XSL-FO文件。

一种选择是将SVG图像内嵌在fo:instream-foreign-object中。一个完整的示例(使用this SVG图像):

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <fo:layout-master-set>
    <fo:simple-page-master master-name="master">
      <fo:region-body />
    </fo:simple-page-master>
  </fo:layout-master-set>

  <fo:page-sequence master-reference="master">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>
        <fo:instream-foreign-object>

          <svg xmlns="http://www.w3.org/2000/svg"
               width="200" height="200">
            <circle cx="100" cy="100" r="50" stroke="black"
                    stroke-width="5" fill="red" />
          </svg>

        </fo:instream-foreign-object>
      </fo:block> 
    </fo:flow>
  </fo:page-sequence>

</fo:root>

另一种选择是从fo:external-graphic

引用SVG图像
<fo:external-graphic src="Svg_example4.svg"/>

如果你想自动化这个,你可以编写一个XSLT,它将SVG转换为嵌入了SVG的XSL-FO文档:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
  <xsl:template match="/">

    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

      <fo:layout-master-set>
        <fo:simple-page-master master-name="master">
          <fo:region-body />
        </fo:simple-page-master>
      </fo:layout-master-set>

      <fo:page-sequence master-reference="master">
        <fo:flow flow-name="xsl-region-body">
          <fo:block>
            <fo:instream-foreign-object>
              <xsl:copy-of select="." />
            </fo:instream-foreign-object>
          </fo:block> 
        </fo:flow>
      </fo:page-sequence>

    </fo:root>    

  </xsl:template>
</xsl:stylesheet>

答案 2 :(得分:1)

不,但您可以使用一些可以帮助您更轻松地创建XSL文件的解决方案。例如。 Altova XMLSpy

答案 3 :(得分:1)

XSL可用于从XML生成XSL。但是由于XSL已经 XML,这个简单的事实并没有让你更具体。

您可以指定一些源XML和所需的XSL吗?不知道你想要完成什么,不能说更多。

的第10章(代码生成)中有一些有趣的例子

XSLT Cookbook

答案 4 :(得分:0)

IntelliJ可以从XML文件生成XSD,反之亦然。我不确定社区版是否具备此功能,但许可版本可以。