【问题标题】:Adding header part and closing tags to XHTML content向 XHTML 内容添加标题部分和结束标记
【发布时间】:2021-11-15 10:22:58
【问题描述】:

我有多个没有标题部分和关闭 HTML 标记(file002.xhtml、file015.xhtml 等)的 XHTML 页面。如何将标题部分和结束标签添加到所有这些页面,使用一些脚本或宏? (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>

【问题讨论】:

    标签: linux xml bash xhtml


    【解决方案1】:

    您可以只使用 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.xmlb.xmlc.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 扩展名,并且在输出中我还需要 .XHTML 文件。
    • 好吧,那么只需更改上面代码中的文件扩展名 :-) 相关部分是设置文件格式的xsl:result-document(或第一个样式表)上的method="xhtml" 属性.
    • 什么是正确的命令语法?我运行命令./gestalt test.xsl list.xml得到错误:Warning: XSLT 1.0 stylesheet is being run on an XSLT 2.0 processor. At line 7 in file:///home/deffo/Downloads/Recipe/GESTALT/test.xsl: Fatal error: http://www.gobosoft.com/eiffel/gobo/gexslt/extension#OUTPUT_RESOLVER_ERROR: Invalid stdout: URI
    • 我编辑了答案以删除警告(在第二个样式表中更改了版本号)。但是错误更复杂:我猜您没有在xsl:result-docmenthref 属性中构造有效的URI。我无法帮助您,因为这在很大程度上取决于您的环境。也许您需要使用文件路径而不是 URI……真的不知道。对不起。
    • 如何在&lt;xsl:result-documenthref属性中使用文件路径?
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多