【问题标题】:How can I pass raw XML data to a MediaWiki template?如何将原始 XML 数据传递给 MediaWiki 模板?
【发布时间】:2020-09-29 16:23:40
【问题描述】:

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

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

在本例中,“&lt;abc x="123"/&gt;”将正确呈现。但是,如果我想将这个 XML 片段“&lt;abc x="123"/&gt;”传递给某个任意模板,而 反过来 会将此内容传递给 syntaxhighlight 扩展,该怎么办?如何才能做到这一点?标准方法似乎不起作用。


我已经想通了:

  • syntaxhighlight 扩展可以通过{{#tag:syntaxhighlight{{{1}}}|lang="xml"|line=1}} 调用。这可以放入模板中。
  • 将一些任意 XML 内容传递给模板似乎是个问题。无论我尝试什么似乎都不起作用。即使使用 &lt;nowiki&gt;...&lt;/nowiki&gt; 也无济于事:在这种情况下,所有“&amp;lt;”都会被“&amp;lt;”替换。

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


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

  • MW:1.34.3
  • SMW:3.2.0
  • 语法高亮:2.0

名为SVGExample的模板:

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

维基页面的内容:

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

结果:

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

这似乎与 MediaWiki 扩展无关。我停用了除MagicNoCacheSyntaxHighlight_GeSHiParserFunctions 之外的所有扩展程序,我得到了相同的结果。


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

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

【问题讨论】:

    标签: xml mediawiki


    【解决方案1】:

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

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

    像这样调用这个模板:{{xml|1=&lt;abc x="123" /&gt;}}。注意|1=

    或者,将Template:= 创建为= 并调用{{xml|&lt;abc x{{=}}"123" /&gt;}},转义每个等号:= → {{=}}

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

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

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

    并这样称呼它:{{xml|xml=&lt;abc x="123" /&gt;}}

    【讨论】:

    • 感谢您的回复,但这正是我尝试过的,但没有奏效。结果是“&amp;lt;abc x="123" /&amp;gt;”而不是“&lt;abc x="123"&gt;”。
    • 奇怪。它在我的维基上工作。你的wiki是公开的吗?如果不是,您的 MediaWiki 和 SyntaxHighlight GeSHi 版本是多少?另外,您是在谈论 HTML 源代码还是它在浏览器中的外观?
    • 这是一个 1.33.0 使用 SyntaxHighlight 版本 2.0。
    • 我刚刚检查过了。它也不适用于版本 1.34.1 的第二个 wiki。
    • 我的 MW 更新:1.34.3。其他语言是否正确显示?你有没有在扩展目录下运行composer install --no-dev/composer update --no-dev?有没有运行maintenance子目录下的两个脚本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2014-02-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多