向 XHTML 内容添加 header 部分和结束标记

Adding header part and closing tags to XHTML content

我有多个 XHTML 页面没有 header 部分和结束 HTML 标签(file002.xhtml、file015.xhtml 等)。如何将 header 部分和结束标记添加到所有这些页面,使用一些脚本或宏? (Linux Debian)。我需要在内容前后添加这些部分:

<?xml version="1.0" encoding="UTF-8"?>
<html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ns="http://www.w3.org/2001/10/synthesis">
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="1260143570.css"/>
</head>
<body>

= CONTENT =

</body>
</html>

您可以只使用 XSLT-1.0 处理器,例如 xsltproc(Linux),或任何其他处理器。
合适的 XSLT 样式表可能如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ws="http://ws">
    <xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />

    <xsl:template match="/">
        <html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ns="http://www.w3.org/2001/10/synthesis">
            <head>
                <title></title>
                <link rel="stylesheet" type="text/css" href="1260143570.css"/>
            </head>
            <body>
                <!-- CONTENT -->
                <xsl:copy-of select="document('input.xml')" />   <!-- Place the input filename here! -->
            </body>
        </html>
    </xsl:template>
    
</xsl:stylesheet>

这适用于 1 个文件。
请注意,您必须使用伪造的 XML 文件作为参数来调用此样式表。


对于更多文件,您可以使用 XSLT-2.0 的 result-docment 函数创建循环。因此,创建一个 XML 文件,其中包含应包含在输出中的文件,如下所示 (a.xml, b.xml, c.xml):

<root>
    <file>a.xml</file>
    <file>b.xml</file>
    <file>c.xml</file>
</root>

然后,XSLT-2.0

 stylesheet to handle this could look like this:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ws="http://ws">
    <xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />

    <xsl:template match="/">
        <xsl:for-each select="/root/file">
            <xsl:result-document href="{substring-before(.,'.')}-WithHeader.html" method="xhtml" encoding="UTF-8" indent="yes">
                <html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ns="http://www.w3.org/2001/10/synthesis">
                    <head>
                        <title></title>
                        <link rel="stylesheet" type="text/css" href="1260143570.css"/>
                    </head>
                    <body>
                        <!-- CONTENT -->
                        <xsl:copy-of select="document(.)" />
                    </body>
                </html>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>
    
</xsl:stylesheet>

此样式表为作为参数传递的 XML 中指定的每个输入 XML 文件创建一个新的 XML 文件,并将字符串 -WithHeader 附加到 /root/file。这种方法可能最接近您的要求;只需使用文件名和 运行 样式表创建 XML 文件。应该就这些了。