在Razor中生成动态XML [英] Generating dynamic XML in Razor
问题描述
我在ASP.NET之外使用Razor从模板生成XML文档.我有以下代码:
I am using Razor outside of ASP.NET to generate XML documents from a template. I have the following code:
<event>
<timeouts trigger='@Model.TriggerTimeout' />
<parameters>
@foreach (var parameter in Model.Parameters) {
<@parameter.Key>@parameter.Value</@parameter.Key>
}
</parameters>
</event>
其中Model.Parameters只是一个名称/值集合.我的预期输出应为:
where Model.Parameters is just a name/value collection. My expected output should be:
<event>
<timeouts trigger='100' />
<parameters>
<name1>value1</name1>
<name2>value2</name2>
<name3>value3</name3>
</parameters>
</event>
但是我实际上得到的是:
but what I am actually getting is:
<event>
<timeouts trigger='100' />
<parameters>
<name1>value1</@parameter.Key>
<name2>value2</@parameter.Key>
<name3>value3</@parameter.Key>
</parameters>
</event>
我做错了什么?我需要使用什么秘诀来使动态元素正确闭合?
What am I doing wrong? What is the secret sauce that I need to apply to make the dynamic elements close properly?
编辑因此,现在我的模型演变为具有多个事件,而我的Razor代码如下所示:
EDIT So now my model evolves to have multiple events, and my Razor code looks like this:
<events>
@foreach (var _event in Model.Events) {
<@_event.Name enabled='@_event.Enabled'>
<timeouts trigger='@_event.TriggerTimeout' />
<parameters>
@foreach (var parameter in _event.Parameters) {
@:<@parameter.Key>@parameter.Value</@(parameter.Key)>
}
</parameters>
</@_event.Name>
}
</events>
输出应为:
<events>
<event1 enabled='true'>
<timeouts trigger='100' />
<parameters>
<name1>value1</name1>
<name2>value2</name2>
</parameters>
</event1>
<event2 enabled='false'>
<timeouts trigger='100' />
<parameters>
<name1>value1</name1>
</parameters>
</event2>
</events>
但实际上是:
<events>
<event1 enabled='true'>
<timeouts trigger='100' />
<parameters>
<name1>value1</name1>
<name2>value2</name2>
</parameters>
</@_event.Name>
<event2 enabled='false'>
<timeouts trigger='100' />
<parameters>
<name1>value1</name1>
</parameters>
</@_event.Name>
</events>
解决方案经过反复的 尝试,我最终找到了丢失的秘密调味料.开头的动态XML元素需要一个?:
前缀才能正确呈现结尾的元素.最奇怪.
SOLUTION
Through a lot of trial and error, I eventually tracked down the missing secret sauce. The opening dynamic XML element needed a ?:
prefix to render the closing element correctly. Most weird.
<events>
@foreach (var _event in Model.Events) {
@:<@_event.Name enabled='@_event.Enabled'>
<timeouts trigger='@_event.TriggerTimeout' />
<parameters>
@foreach (var parameter in _event.Parameters) {
@:<@parameter.Key>@parameter.Value</@(parameter.Key)>
}
</parameters>
</@_event.Name>
}
</events>
推荐答案
您需要编写</@(parameter.Key)>
,以阻止Razor认为这是电子邮件地址.
You need to write </@(parameter.Key)>
to stop Razor from thinking that that's an email address.
这篇关于在Razor中生成动态XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!