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



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

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

在这个例子中;CCD_ 1";将正确渲染。但是如果我想传递这个XML snipplet";CCD_ 2";到某个任意模板,反过来会将此内容传递给syntaxhighlight扩展?如何做到这一点?标准方法似乎不起作用。


我已经明白了:

  • 可以通过{{#tag:syntaxhighlight{{{1}}}|lang="xml"|line=1}}调用syntaxhighlight扩展。这可以放入模板中
  • 将一些任意的XML内容传递给模板似乎是个问题。不管我怎么做似乎都不起作用。即使使用CCD_ 6也无济于事:在这种情况下;CCD_ 7";被替换为";&lt;">

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


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

  • 兆瓦:1.34.3
  • SMW:3.2.0
  • SyntaxHighlight:2.0

名为SVGExample:的模板

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

wiki页面的内容:

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

结果:

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

这似乎不是MediaWiki扩展的问题。我停用了除<abc x="123"/>0、SyntaxHighlight_GeSHiParserFunctions之外的所有扩展,得到了相同的结果。


为那些想深入了解这一点的人更新:

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

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

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

调用此模板如下:{{xml|1=<abc x="123" />}}。注|1=

或者,将Template:=创建为=,并调用<abc x="123"/>0,转义每个等号:=→CCD_ 22。

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

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

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

并这样称呼它:CCD_ 24。

最新更新