【问题标题】:AsciiDoctor: How can I add custom xmlns'AsciiDoctor:如何添加自定义 xmlns'
【发布时间】:2020-12-20 00:56:25
【问题描述】:

当我使用 AsciiDoctor 转换 asciidoc 文件时,如何在输出中添加自定义 xmlns

我想在顶部的book 标记中添加xmlns:xi="http://www.w3.org/2001/XInclude"

当前的实现似乎生成:

<?xml version="1.0" encoding="UTF-8"?>
<?asciidoc-toc?>
<?asciidoc-numbered?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
<info>
<title>title</title>
</info>
</book>

从此:

= title
:lang: en

当我跑步时:

$ asciidoctor -b docbook5 -d book -o out.xml source.txt

有一个built-in attribute xmlns,但它似乎适用于 docbook 4.5。

我想使用 XInclude 的原因是包含来自Docinfo filesPassthrough Blocks 的一些 xml 文件

【问题讨论】:

    标签: asciidoctor


    【解决方案1】:

    通过对 asciidoctor 代码的一些研究,很快就清楚您要修改的部分是相当静态的。 请参阅asciidoctor/converter/docbook5.rb Line 44 了解更多信息。

    最好的方法是创建一个修改输出的后处理器扩展。下面的例子只是为了展示一个可能的实现。

    创建一个包含以下内容的文件并将其命名为docbook_postprocessor.rb

    class Docbook5XiPostprocessor < Asciidoctor::Extensions::Postprocessor
      def process document, output
        if document.basebackend? 'docbook'
          input_regex = %r{^(<.*xmlns:xl="http://www.w3.org/1999/xlink") (version="5.0".*>)}
          replacement = %(\\1 xmlns:xi="http://www.w3.org/2001/XInclude" \\2)
          output = output.sub(input_regex, replacement)
        end
        output
      end
    end
    
    Asciidoctor::Extensions.register do
      postprocessor Docbook5XiPostprocessor
    end
    

    注意:为简洁起见,上述扩展名与名为 source.adoc 的 asciidoctor 源文件位于同一目录中。

    使用 -r ./docbook_postprocessor.rb 参数运行 asciidoctor 命令。

    $ asciidoctor -r ./docbook_postprocessor.rb -b docbook5 -d book -o - source.adoc  
    <?xml version="1.0" encoding="UTF-8"?>
    <?asciidoc-toc?>
    <?asciidoc-numbered?>
    <book
      xmlns="http://docbook.org/ns/docbook"
      xmlns:xl="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      version="5.0"
      xml:lang="en">
    <info>
    <title>test</title>
    <date>2020-12-19</date>
    </info>
    </book>
    

    * 上面的输出已经稍微重新格式化以消除滚动条

    使用上述代码创建 ruby​​ gem 以便于分发是留给读者的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2011-08-22
      • 2018-02-26
      相关资源
      最近更新 更多