我有以下一个非常大的 xml 文档,它看起来像下面的摘录。我可以使用网上找到的一些示例将文件拆分为多个 html 文件。
我对结果文件的唯一问题是它们应该<h1>
在下一个之前包含标签和每个元素<h1>
,然后<h1>
使用以下元素获取下一个,依此类推。
所以基本上我需要的是能够<h1 id=h1>
与以下元素一起生成一个文件(<p>
, <ol>
, <pre>
)目前在创建文件时,下一个 h1 标记之前的以下元素不包含在创建的文档中。而且我不知道如何调整 xslt 来做到这一点。原始xml
<?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>
xslt 以下来自 IBM 开发人员网站的示例,位于此处:http ://www.ibm.com/developerworks/library/x-tipmultxsl/
<?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 One</body>
</html>
<html>
<body>Header Two</body>
</html>
<html>
<body>Header Three</body>
</html>
非常感谢。