如何将原始 XML 数据传递给 MediaWiki 模板?

How can I pass raw XML data to a MediaWiki template?

这是在 MediaWiki 中显示源代码的方式:

<syntaxhighlight lang="xml" line>
    <abc x="123" />
</syntaxhighlight>

在此示例中,“<abc x="123"/>”将被正确呈现。但是,如果我想将此 XML 片段“<abc x="123"/>”传递给某个任意模板,而该模板 会将此内容传递给 syntaxhighlight延期?如何才能做到这一点?标准方法似乎不起作用。


我已经想通了:

你有什么想法,甚至知道解决这个问题的方法吗?


更新:我重新安装了 MW 1.34.3,以使其与试图在 Whosebug 上帮助我的人尽可能相同。现在:

名为SVGExample的模板:

{{#tag:syntaxhighlight|{{{1|}}}|lang="xml"|line=1}}

维基页面内容:

{{SVGExample|<nowiki><abc x="123"/></nowiki>}}

结果:

1   &lt;abc x="123"/&gt;

看来不是MediaWiki扩展的问题。我停用了除 MagicNoCacheSyntaxHighlight_GeSHiParserFunctions 之外的所有扩展,我得到了相同的结果。


更新给那些想深入研究的人:

看来解决占位符问题就在这里引入了。即使使用建议的将数据传递给参数的方式,也有一些处理:注释被过滤掉。我在自定义扩展中的实验表明,一旦您解析传递给模板的参数,数据就会得到 HTML 编码,从而导致不需要的 &lt; 实体(和其他实体)。 SyntaxHighlight 扩展做了某种魔法来避免这种现象,因为它在解析模板参数后接收原始数据,而 $parser->recursiveTagParse(...) 的经典方法在这方面失败了。

创建一个模板,比如说,Template:Xml:

<includeonly>{{#tag:syntaxhighlight|{{{1|}}}|lang="xml"|line=1}}</includeonly>

像这样调用此模板:{{xml|1=<abc x="123" />}}。注意 |1=.

或者,将 Template:= 创建为 = 并调用 {{xml|<abc x{{=}}"123" />}},转义每个等号:={{=}}.

解析器函数的匿名参数中的等号需要转义,这样 MediaWiki 就不会将其作为参数名称和值之间的分隔符。

因此,另一种选择是使用命名参数声明 Template:xml,如下所示:

<includeonly>{{#tag:syntaxhighlight|{{{xml|}}}|lang="xml"|line=1}}</includeonly>

并这样称呼它:{{xml|xml=<abc x="123" />}}.