编程创建XSLT文件(Create xslt files programmatically)

2019-06-24 06:44发布

我知道我可以创建xml通过编程文件DOM像以下的Java API:

DocumentBuilderFactory documentBuilderFactory = 
    DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = documentBuilder.newDocument();
Element rootElement = document.createElement("map");
document.appendChild(rootElement);

Element em = document.createElement("string");
em.setAttribute("name", "FirstName");
....

但是,有没有什么API的构建一个xslt树? (如DOM例如一个API)

我需要somehing是这样的:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:template match="root">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="my-page">
      <fo:region-body margin="1in"/>
    </fo:simple-page-master>
  </fo:layout-master-set>

  <fo:page-sequence master-reference="my-page">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>
        <fo:external-graphic width="100pt" height="100pt" content-width="50pt" content-height="50pt" src="images/shopping-cart_100.jpg"/>
      </fo:block>
      <fo:block>Good Morning, <xsl:value-of select="name" />!</fo:block>
      <fo:block>
        <fo:table>
             <fo:table-body>
                <fo:table-row>
                    <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
                        <fo:block>

和:

              <xsl:for-each select="./friend">
                <fo:table-row>
                <fo:table-cell border="solid 1px black" text-align="center">
                    <fo:block>
                        <xsl:value-of select="position()" />
                    </fo:block>
                </fo:table-cell>
                <fo:table-cell border="solid 1px black" text-align="center">
                    <fo:block>
                        <xsl:value-of select="name" />
                    </fo:block>
                </fo:table-cell>
                <fo:table-cell border="solid 1px black" text-align="center">

提前致谢。

Answer 1:

由于XSLT是XML也一样,你可以简单地使用相同的策略:

...
Document document = documentBuilder.newDocument();

Element rootElement = document.createElement("xsl:stylesheet");
// adding attributes like namespaces etc...

document.appendChild(rootElement); 
Element em = document.createElement("xsl:template");
em.setAttribute("match", "/");

等等...

但是,这不是很优雅。 您应该使用一个库或框架相反,你应该很容易找到一个周围的Googling。



Answer 2:

您可以创建一个XSLT你创建一个XML文件以同样的方式,因为XSLT文件的XML文件。

但是,如果你要处理的XML / XSLT转换了很多,阿帕奇茧3有一个非常轻量级的XML / XSLT管道系统作为一个库,而不是处理手动所有XML DOM的东西,XSLT转换使用。



Answer 3:

DOM是创建XML的一个非常麻烦的方式。

有一个更好的方法 - 使用XSLT。

更复杂的XML,使用XSLT而不是DOM更大的胜利来创建它。

没有理由为什么你不能使用XSLT创建XSLT(甚至还有一个特别声明的xsl:命名空间的别名,使其稍微容易 - 搜索的xsl:命名空间别名将显示其使用的例子。



文章来源: Create xslt files programmatically