XMLTemplate["string"]
产生一个 TemplateObject, 表示可被诸如 TemplateApply 这样的函数应用的 XML 模板.
XMLTemplate[src]
用 File[…]、URL[…] 或 CloudObject[…] 作为字符串模板的来源.
XMLTemplate[form,args]
产生一个有参数的 TemplateObject,可用于云部署或其他运算.
XMLTemplate
XMLTemplate["string"]
产生一个 TemplateObject, 表示可被诸如 TemplateApply 这样的函数应用的 XML 模板.
XMLTemplate[src]
用 File[…]、URL[…] 或 CloudObject[…] 作为字符串模板的来源.
XMLTemplate[form,args]
产生一个有参数的 TemplateObject,可用于云部署或其他运算.
更多信息和选项
- XML 中可以使用下来基本标签:
-
<wolfram:slot> TemplateSlot <wolfram:expr> TemplateExpression <wolfram:if> TemplateIf <wolfram:which> 多个 TemplateIf <wolfram:sequence> TemplateSequence <wolfram:with> TemplateWith <wolfram:template> TemplateObject <wolfram:get> Get <wolfram:comment> 需要忽略的评论 <wolfram:verbatim> verbatim XML - <wolfram:slot inserter=f> 在 TemplateSlot 中指定选项设置 InsertionFunction->f.
- <wolfram:expr inserter=f> 在 TemplateExpression 中指定选项设置 InsertionFunction->f.
- <wolfram:slot/> 等价于 TemplateSlot[1].
- <wolfram:if test=test>body</wolfram:if> 指定应该绘制 body,如果 test 计算得到 True.
- <wolfram:which> ... </wolfram:which> 可以包含任意数目的 <wolfram:if ...> ... </wolfram:if>,并且可选单个 <wolfram:else> ... </wolfram:else>. 如果按顺序计算 "if" 测试,第一个计算得到 True,这是 "which" 的最终格式.
- <wolfram:sequence attr>body</wolfram:sequence> 支持下列属性:
-
values (required) 重复 body 的列表或者关联性 slot 1 提供给 body 的模板插口的名称 index 2 提供给 body 的位置索引名称 delimiters Sequence[] 在 body 的重复之间插入的分隔符 default Sequence[] 若无数值时应使用的格式 inserter Inherited InsertionFunction 选项的设置 - 当应用模板时,<wolfram:with key1=val1 key2=val2 ...>body</wolfram:with> 指定 keyi 应该用 body 中的 vali 替换.
- <wolfram:template attr>body</wolfram:template> 支持下列属性,它定义了 TemplateObject 的选项,用于 body:
-
inserter Inherited InsertionFunction 选项的设置 combiner Inherited CombinerFunction 选项的设置 - <wolfram:get attr/> 支持下列属性:
-
path (required) 文件或者 URL 路径 inserter Inherited InsertionFunction 选项的设置 combiner Inherited CombinerFunction 选项的设置 - XMLTemplate 具有下列选项:
-
InsertionFunction "HTMLFragment" 在插入表达式前应用的函数或者格式 CombinerFunction StringJoin 在返回结果前用于合并各个部分的函数 - 在 XMLTemplate[File[…]] 和 XMLTemplate[URL[…]] 中,将源文件等的内容作为字符串导入.
范例
打开所有单元 关闭所有单元基本范例 (2)
XMLTemplate["first <wolfram:slot id='a'/> then <wolfram:slot id='b'/>"][<|"a" -> 1234, "b" -> 5678|>]用 TemplateApply 来做同样的事情:
TemplateApply[XMLTemplate["first <wolfram:slot id='a'/> then <wolfram:slot id='b'/>"],
<|"a" -> 1234, "b" -> 5678|>]XMLTemplate 支持和 StringTemplate 一样的语法;当模板被运用的时候,对 <*…*> 中的表达式进行计算:
TemplateApply @ XMLTemplate["Values: <* Range[5] *>."]TemplateApply[
XMLTemplate["Range of `a`: <* Range[#a] *>."],
<|"a" -> 5|>
]TemplateApply[
XMLTemplate["Range of <wolfram:slot id='a'/>: <wolfram:expr>Range[#a]</wolfram:expr>."],
<|"a" -> 5|>
]当你需要将数据注入 XML 属性中时,字符串模板语法会很有用:
TemplateApply[
XMLTemplate["link: <a href='`url`'><wolfram:slot id='name'/></a>"],
<|"url" -> "http://wolfram.com", "name" -> "wolfram"|>
]范围 (4)
完全支持 File:
XMLTemplate[File["Examples/XML/Sequence.html"]]template = CloudDeploy[XMLTemplate["My name is <wolfram:slot id='Name'/>."]]FileTemplate[template]XMLTemplate 的第二个参数可用来把数据绑定到模板上:
t = XMLTemplate["a is <wolfram:slot id='a'/>, b is <wolfram:slot id='b'/>", <|"a" :> RandomReal[]|>];
TemplateApply[t]TemplateApply[t, <|"b" :> RandomReal[]|>]可以使用 URL 提取模板:
template = URL @@ CloudExport["hello <wolfram:slot id='Name'/>", "String"]URLRead[template, "Body"]XMLTemplate[template]选项 (2)
InsertionFunction (1)
插入(inserter)属性可以是一个函数或者是 $ExportFormats 之间选中的字符串:
t = "
<script type='text/javascript'>
var planets= <wolfram:slot id='planets'>#planets</wolfram:slot>;
</script>
";
data = <| "planets" -> {
"Jupiter",
"Mars",
"Earth"
} |>;
TemplateApply[XMLTemplate[t, InsertionFunction -> "JSON"], data]TemplateApply[XMLTemplate[t, InsertionFunction -> Function[body, ExportString[body, "JSON"]]], data]InsertionFunction 可以是任何内容:
TemplateApply[
XMLTemplate[
"<h1>Planet</h1>
<p><wolfram:slot id='planet'/> is beautiful</p>",
InsertionFunction -> ToUpperCase
],
<| "planet" -> "Jupiter"|>
]CombinerFunction (1)
t = "<h1>Template</h1>
This is my <strong>html</strong>.
In javascript everything will be \"escaped\"
";
TemplateApply[XMLTemplate[t, CombinerFunction -> "JSON"]]TemplateApply[XMLTemplate[t, CombinerFunction -> Composition[StringJoin, ToUpperCase]]]应用 (9)
<wolfram:slot id='...' inserter='...'>...</wolfram:slot>
XMLTemplate["value: <wolfram:slot id='1'/>"][1]ToMean[s_String] := StringTrim[s];
ToMean[l_List] := ToString @ N[Mean[l]];
t = XMLTemplate["
slot data: <wolfram:slot id='data' inserter='ToMean'>
No data found.
</wolfram:slot>
"];
TemplateApply[t]TemplateApply[t, <|"data" -> Range[10, 15]|>]<wolfram:expr inserter='...'>...</wolfram:expr>
XMLTemplate["mean: <wolfram:expr>Mean[#1]</wolfram:expr>"][Range[10]]ToJSON[Missing] := "null";
ToJSON[expr_] := ExportString[expr, "JSON"];
t = XMLTemplate["
<script type='text/javascript'>
var planets = <wolfram:expr inserter=ToJSON>Rule @@@ Transpose[
{#planets, #colors}
]</wolfram:expr>;
</script>
"];
TemplateApply[t, <|"planets" -> {"Mercury", "Earth", "Mars"}, "colors" -> {"Grey", "Light Blue", "Red"}|>]<wolfram:if test='...'>...</wolfram:if>
t = XMLTemplate["This is planet <wolfram:slot id='planet'/>. <wolfram:if test='#beautiful'>It's so beautiful to me.</wolfram:if>"];
TemplateApply[t, <|"planet" -> "Venus"|>]TemplateApply[t, <|"planet" -> "Mars", "beautiful" -> True|>]t = XMLTemplate["This is planet <wolfram:slot id='planet'/>. <wolfram:if test='#planet === #home'>It's our home planet.</wolfram:if>"];
TemplateApply[t, <|"planet" -> "Earth", "home" -> "Earth"|>]<wolfram:which><wolfram:if test='...'>...</wolfram:if></wolfram:which>
t = XMLTemplate["<wolfram:which>
<wolfram:if test='StringQ[#planets]'>This is a single planet.</wolfram:if>
<wolfram:if test='ListQ[#planets]'>This is a list of planets.</wolfram:if>
<wolfram:if test='MatchQ[#planets, Missing|_Missing]'>This planet is missing.</wolfram:if>
<wolfram:else>This is not a planet.</wolfram:else>
</wolfram:which>"];
TemplateApply[t]TemplateApply[t, <|"planets" -> {"Jupiter", "Mars", "Earth"}|>]TemplateApply[t, <|"planets" -> JustAnotherSymbol|>]<wolfram:sequence values='...' ...>...</wolfram:sequence>
t = XMLTemplate["<ul>
<wolfram:sequence values='#planets'>
<li><wolfram:slot id='1'/></li>
</wolfram:sequence>
</ul>"];
TemplateApply[t, <|"planets" -> {"jupiter", "mars", "earth"}|>]t = XMLTemplate["<ul>
<wolfram:sequence values='#planets' slot='planet' index='counter'>
<li><wolfram:slot id='counter'/>: <wolfram:slot id='planet'/></li>
</wolfram:sequence>
</ul>"];
TemplateApply[t, <|"planets" -> {"jupiter", "mars", "earth"}|>]CapFirst[a_String] := With[
{chars = Characters[a]},
StringJoin[ToUpperCase[First[chars]], Rest[chars]]
];
CapFirst[a_] := ToString[a];
t = XMLTemplate["<ul>
<wolfram:sequence values='#planets' index='counter' inserter='CapFirst'>
<li><wolfram:slot id='counter'/>: <wolfram:slot id='1'/></li>
</wolfram:sequence>
</ul>"];
TemplateApply[t, <|"planets" -> {"jupiter", "mars", "earth"}|>]使用默认数值(StringTemplate):
t = XMLTemplate["<ul>
<wolfram:sequence values='#results' index='counter' default='<li>No results for: `query`</li>'>
<li><wolfram:slot id='counter'/>: <wolfram:slot id='1'/></li>
</wolfram:sequence>
</ul>"];
TemplateApply[t, <| "query" -> "alpha centauri", "results" -> {} |>]t = XMLTemplate["Insert one of the following planets: <wolfram:sequence values='#1' delimiters=', '><wolfram:slot id='1'/></wolfram:sequence>."];
TemplateApply[t, {{"jupiter", "mars", "earth"}}]<wolfram:with key$1='val$1' ...>...</wolfram:with>
t = XMLTemplate["<wolfram:with mean='Round @ Mean[#data]' total='Total[#data]'>
Mean: <wolfram:slot id='mean'/>
Total: <wolfram:slot id='total'/>
</wolfram:with>
Data: <wolfram:slot id='data'/>"];
TemplateApply[t, <|"data" -> Fibonacci /@ Range[10, 15]|>]<wolfram:get path='...'><wolfram:slot id='...'/>...</wolfram:get>
包括路径的模板. 路径是一个 StringTemplate:
t = XMLTemplate["<wolfram:get path='Examples/XML/with.html' />"];
TemplateApply[t, <|"data" -> Range[10]|>]capitalize = Composition[ToUpperCase, ToString];
strip[body_] := StringReplace[StringJoin[body], WhitespaceCharacter -> ""];
t = XMLTemplate["<wolfram:get combiner='strip' inserter='capitalize' path='Examples/XML/sequence.html'/>"];
TemplateApply[t, <|"data" -> {"jupiter", "mars", "earth"}|>]Import["Examples/XML/Inheritance/main.html", "String", Path -> $TemplatePath]TemplateApply @ XMLTemplate["
<wolfram:get path='Examples/XML/Inheritance/main.html'>
<wolfram:slot id='pageTitle'>Earth</wolfram:slot>
<wolfram:slot id='pageHeader'>Planet earth</wolfram:slot>
<wolfram:slot id='pageContent'>Read all about earth on <a href='http://en.wikipedia.org/wiki/Earth'>Wikipedia</a></wolfram:slot>
<wolfram:slot id='pageFooter'>Thanks for visiting our home planet</wolfram:slot>
</wolfram:get>"]<wolfram:template ...>...</wolfram:template>
capitalize = Composition[ToUpperCase, StringJoin];
TemplateApply @ XMLTemplate["
<wolfram:template combiner='capitalize'>
<p>this is a block of text and <wolfram:slot>slots</wolfram:slot></p>
</wolfram:template>
"]capitalize = Composition[ToUpperCase, StringJoin];
TemplateApply[
XMLTemplate["
<wolfram:template combiner='capitalize'>
<p>All text is capitalized</p>
<wolfram:get path='Examples/XML/if.html'/>
</wolfram:template>
"],
<| "data" -> "Earth" |>
]<wolfram:comment>...</wolfram:comment>
TemplateApply @ XMLTemplate["
<h1>About planet Mars</h1>
<wolfram:comment>
Insert planet mass here
</wolfram:comment>
<p>Mars is red</p>
"]TemplateApply @ XMLTemplate["
<h1>About planet Jupiter</h1>
<wolfram:comment>
Maybe we should improve this description
</wolfram:comment>
<p>Jupiter is big</p>
"]<wolfram:verbatim>...</wolfram:verbatim>
使用“verbatim”来避免语义分析. 允许可选的插入函数:
capitalize = Composition[ToUpperCase, StringJoin];
TemplateApply @ XMLTemplate["
Sample usage of comment tag:
<wolfram:verbatim inserter='capitalize'>
<wolfram:comment>
This comment will (not) be deleted
</wolfram:comment>
</wolfram:verbatim>
"]属性和关系 (1)
XMLTemplate 的运算结果为 TemplateObject:
XMLTemplate["My name is <wolfram:slot id='Name'/>."]可能存在的问题 (1)
XMLTemplate 的第二个参数中的数据比 TemplateApply 中的参数的优先级要高:
t = XMLTemplate["My name is <wolfram:slot id='a'/>.", <|"a" -> 1|>];
TemplateApply[t, <|"a" -> 2|>]巧妙范例 (1)
可以把 XMLTemplate 部署到云端. 每一次访问 URL 时,TemplateApply 将渲染模板:
CloudDeploy[
XMLTemplate[
"now is: `Now`",
<|"Now" :> Now|>
]]相关的工作流程
- 使用模板创建网页
文本
Wolfram Research (2014),XMLTemplate,Wolfram 语言函数,https://reference.wolfram.com/language/ref/XMLTemplate.html.
CMS
Wolfram 语言. 2014. "XMLTemplate." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/XMLTemplate.html.
APA
Wolfram 语言. (2014). XMLTemplate. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/XMLTemplate.html 年
BibTeX
@misc{reference.wolfram_2026_xmltemplate, author="Wolfram Research", title="{XMLTemplate}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/XMLTemplate.html}", note=[Accessed: 02-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_xmltemplate, organization={Wolfram Research}, title={XMLTemplate}, year={2014}, url={https://reference.wolfram.com/language/ref/XMLTemplate.html}, note=[Accessed: 02-August-2026]}