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
使用xslt将xml拆分为多个html文件_Xml_Xslt - Fatal编程技术网

使用xslt将xml拆分为多个html文件

使用xslt将xml拆分为多个html文件,xml,xslt,Xml,Xslt,我有一个非常大的xml文档,它看起来像下面的摘录。 <html> <body>Header Two</body> </html> 我能够使用web上的一些示例将文件拆分为多个html文件 <html> <body>Header Two</body> </html> 我对结果文件的唯一问题是,它们应该包括标记和下一个之前的每个元素,然后使用以下元素获取下一个,依此类推

我有一个非常大的xml文档,它看起来像下面的摘录。
<html>
    <body>Header Two</body>
    </html>
我能够使用web上的一些示例将文件拆分为多个html文件

<html>
    <body>Header Two</body>
    </html>
我对结果文件的唯一问题是,它们应该包括
标记和下一个
之前的每个元素,然后使用以下元素获取下一个
,依此类推

<html>
    <body>Header Two</body>
    </html>
因此,基本上我需要的是能够为
以及以下元素生成一个文件(
<?xml version="1.0" encoding="UTF-8"?>

<paragraphs>

<h1 id= "h1">Header One</h1>

<p>The quick brown fox jumps over the lazy dog. </p>

<p>The quick brown fox jumps over the lazy dog.  </p>

<p>The quick brown fox jumps over the lazy dog.</p>
<ol>
    <li>
        List 1
        </li>
        <li>
            List 2
            </li>

</ol>

            <h1 id= "h2">Header  Two</h1>

            <p>The quick brown fox jumps over the lazy dog. </p>

            <p>The quick brown fox jumps over the lazy dog.</p>
            <ul>
                <li>
                    List 3
                    </li
                >
                    <li>
                        List 4
                        </li>

            </ul>

            <p>The quick brown fox jumps over the lazy dog.</p>

            <h1 id= "h3">Header  Three</h1>

            <pre>my example one</pre>

            <p>The quick brown fox jumps over the lazy dog.</p>

            <pre> Another example</pre>

</paragraphs>  
<html>
    <body>Header Two</body>
    </html>
当前创建文件时,下一个h1标记之前的以下元素不包括在创建的文档中。我不知道如何调整xslt来做到这一点。 原始xml

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0">

    <xsl:output method="text"/>
    <xsl:output method="html" indent="yes" name="html"/>

    <xsl:template match="/">
        <xsl:for-each select="//h1">
            <xsl:variable name="filename"
                select="concat('output/',@id,'.html')" />
            <xsl:value-of select="$filename" />  <!-- Creating  -->
            <xsl:result-document href="{$filename}" format="html">
                <html><body>
                    <xsl:value-of select="text()"/>
                </body></html>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
<html>
    <body>Header Two</body>
    </html>

标题一
敏捷的棕色狐狸跳过了懒狗

<html>
    <body>Header Two</body>
    </html>
敏捷的棕色狐狸跳过了懒狗

<html>
    <body>Header Two</body>
    </html>
敏捷的棕色狐狸跳过了懒狗

<html>
    <body>Header Two</body>
    </html>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/*">
        <xsl:for-each-group select="*" group-starting-with="h1">
            <xsl:result-document href="output/{@id}.html">
                <html>
                    <body>
                        <xsl:apply-templates select="current-group()"/>
                    </body>
                </html>
            </xsl:result-document>
        </xsl:for-each-group>
    </xsl:template>

    <xsl:template match="ol">
        <ul>
            <xsl:apply-templates select="@*|node()"/>
        </ul>
    </xsl:template>

</xsl:stylesheet>
  • 清单1
  • 清单2
  • 标题二 敏捷的棕色狐狸跳过了懒狗

    <html>
        <body>Header Two</body>
        </html>
    
    敏捷的棕色狐狸跳过了懒狗

    <html>
        <body>Header Two</body>
        </html>
    
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes"/>
        <xsl:strip-space elements="*"/>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="/*">
            <xsl:for-each-group select="*" group-starting-with="h1">
                <xsl:result-document href="output/{@id}.html">
                    <html>
                        <body>
                            <xsl:apply-templates select="current-group()"/>
                        </body>
                    </html>
                </xsl:result-document>
            </xsl:for-each-group>
        </xsl:template>
    
        <xsl:template match="ol">
            <ul>
                <xsl:apply-templates select="@*|node()"/>
            </ul>
        </xsl:template>
    
    </xsl:stylesheet>
    
    • 清单3
    • 清单4
    敏捷的棕色狐狸跳过了懒狗

    <html>
        <body>Header Two</body>
        </html>
    
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes"/>
        <xsl:strip-space elements="*"/>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="/*">
            <xsl:for-each-group select="*" group-starting-with="h1">
                <xsl:result-document href="output/{@id}.html">
                    <html>
                        <body>
                            <xsl:apply-templates select="current-group()"/>
                        </body>
                    </html>
                </xsl:result-document>
            </xsl:for-each-group>
        </xsl:template>
    
        <xsl:template match="ol">
            <ul>
                <xsl:apply-templates select="@*|node()"/>
            </ul>
        </xsl:template>
    
    </xsl:stylesheet>
    
    头球三 我举一个例子 敏捷的棕色狐狸跳过了懒狗

    <html>
        <body>Header Two</body>
        </html>
    
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes"/>
        <xsl:strip-space elements="*"/>
    
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="/*">
            <xsl:for-each-group select="*" group-starting-with="h1">
                <xsl:result-document href="output/{@id}.html">
                    <html>
                        <body>
                            <xsl:apply-templates select="current-group()"/>
                        </body>
                    </html>
                </xsl:result-document>
            </xsl:for-each-group>
        </xsl:template>
    
        <xsl:template match="ol">
            <ul>
                <xsl:apply-templates select="@*|node()"/>
            </ul>
        </xsl:template>
    
    </xsl:stylesheet>
    
    另一个例子
    xslt遵循IBM开发者网站上的示例,位于此处:

    <html>
        <body>Header Two</body>
        </html>
    
    
    
    生成的文件如下所示:

    <html>
        <body>Header Two</body>
        </html>
    
    <paragraphs>
        <h1 id="h1">Header One</h1>
        <p>The quick brown fox jumps over the lazy dog. </p>
        <p>The quick brown fox jumps over the lazy dog. </p>
        <p>The quick brown fox jumps over the lazy dog.</p>
        <ol>
            <li> List 1 </li>
            <li> List 2 </li>
        </ol>
        <h1 id="h2">Header Two</h1>
        <p>The quick brown fox jumps over the lazy dog. </p>
        <p>The quick brown fox jumps over the lazy dog.</p>
        <ul>
            <li> List 3 </li>
            <li> List 4 </li>
        </ul>
        <p>The quick brown fox jumps over the lazy dog.</p>
        <h1 id="h3">Header Three</h1>
        <pre>my example one</pre>
        <p>The quick brown fox jumps over the lazy dog.</p>
        <pre> Another example</pre>
    </paragraphs>
    
    
    标题一
    

    
    标题二
    

    
    头球三
    

    非常感谢。

    我想你在找这样的东西

    <html>
        <body>Header Two</body>
        </html>
    
    XML输入

    <html>
        <body>Header Two</body>
        </html>
    
    <html>
       <body>
          <h1 id="h2">Header Two</h1>
          <p>The quick brown fox jumps over the lazy dog. </p>
          <p>The quick brown fox jumps over the lazy dog.</p>
          <ul>
             <li> List 3 </li>
             <li> List 4 </li>
          </ul>
          <p>The quick brown fox jumps over the lazy dog.</p>
       </body>
    </html>
    

    我想你在找这样的东西

    <html>
        <body>Header Two</body>
        </html>
    
    XML输入

    <html>
        <body>Header Two</body>
        </html>
    
    <html>
       <body>
          <h1 id="h2">Header Two</h1>
          <p>The quick brown fox jumps over the lazy dog. </p>
          <p>The quick brown fox jumps over the lazy dog.</p>
          <ul>
             <li> List 3 </li>
             <li> List 4 </li>
          </ul>
          <p>The quick brown fox jumps over the lazy dog.</p>
       </body>
    </html>
    

    由于某些原因,我无法正确格式化邮件,请耐心等待。由于某些原因,我无法正确格式化邮件,请耐心等待。