Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml libxslt是否具有将文档拆分为多个文档的功能?_Xml_Xslt_Libxslt - Fatal编程技术网

Xml libxslt是否具有将文档拆分为多个文档的功能?

Xml libxslt是否具有将文档拆分为多个文档的功能?,xml,xslt,libxslt,Xml,Xslt,Libxslt,看起来libxslt不支持XSLT2.0和xsl:result-document。是否有一种方法可以使用libxslt或xsltproc模拟xsl:result文档?如果libxslt实现,那么可以使用扩展元素 如果没有,则必须编写自己的扩展函数,因为XSLT1.0不支持创建多个结果文档 更新:如中所确认的,libxslt实现了EXSLT。只要抓住它并使用是的,有,使用。一个简单的例子: ==== foo.xsl ==== <?xml version="1.0" encoding="utf

看起来libxslt不支持XSLT2.0和
xsl:result-document
。是否有一种方法可以使用
libxslt
xsltproc
模拟
xsl:result文档

如果libxslt实现,那么可以使用扩展元素

如果没有,则必须编写自己的扩展函数,因为XSLT1.0不支持创建多个结果文档

更新:如中所确认的,libxslt实现了EXSLT。只要抓住它并使用

是的,有,使用。一个简单的例子:

==== foo.xsl ====
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl">
  <xsl:output method="html"/>
  <xsl:template match="/">
    <exsl:document href="toc.html" method="html">
      <html>
        <body>
          <xsl:apply-templates select=".//h1"/>
        </body>
      </html>
    </exsl:document>
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
将向标准输出:

<html>
  <body>
    <h1>Hello, world!</h1>
    <p>Some longwinded text follows.</p>
  </body>
</html>

下面是一个示例,演示如何在遍历节点集时使用扩展名创建无限数量的文件。同样,使用xsltproc(libxslt)

示例XML输入:

示例XSLT:

公司:

将生成3个文件ACME1.html、ACME2.html等。

好问题(+1)。有关可能的解决方案,请参见我的答案。项目所使用的libxslt;它在libexslt.a中提供。
xsltproc foo.xsl foo.html
<html>
  <body>
    <h1>Hello, world!</h1>
    <p>Some longwinded text follows.</p>
  </body>
</html>
<html><body><h1>Hello, world!</h1></body></html>
<clients>
    <client id="ACME1" name="ACME Company 1"/>
    <client id="ACME2" name="ACME Company 2"/>
    <client id="ACME3" name="ACME Company 3"/>
</clients>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl">

<xsl:output method="html" indent="yes" encoding="UTF-8" />

<xsl:template match="/">
    <xsl:for-each select="/clients/client">
    <exsl:document href="{@id}.html" method="html">
      <html>
        <body>
          <h1>Company: <xsl:apply-templates select="@name"/></h1>
        </body>
      </html>
    </exsl:document>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>