向 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 文件。应该就这些了。
我有多个 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 文件。应该就这些了。