为什么我收到错误消息:doubled属性?

时间:2013-09-17 15:18:36

标签: c# xml linq

为什么我会收到错误消息:Doubled Attribute?我想这意味着,有多个具有相同名称和值的属性。

 XElement XMLRun = new XElement("RessourceAttribute");

 foreach (var kvp in Run) //kvp = KeyValuePair<string,string> and Run = List<KeyValuePair<string, string>>
 {
    XAttribute aKey = new XAttribute("name", kvp.Key);
    XAttribute aValue = new XAttribute("value", kvp.Value);
    XMLRun.Add(aKey, aValue);       
 }

 XMLE.Add(XMLRun);

每一步都应该生成这两个新属性,然后在父节点上添加。我很确定问题出在这里,因为属性名必须不同。我的Enterprise Architect AddIn上发生错误。新生成的属性是否有可能具有不同的名称?

2 个答案:

答案 0 :(得分:3)

如果Run列表是这样的:

"foo": "bar"
"foo2": "bar2"

你正在做类似的事情:

<ResourceAttribute name="foo" value="bar" name="foo2" value="bar2" />

由于属性出现两次,这确实是非法的......

你想做什么?

答案 1 :(得分:2)

如果Run包含任何一对以上,您将收到错误,这似乎相当微不足道。给出:

var Run = new Dictionary<string, string>
{
    { "1", "a" },
    { "2", "b" },
    { "3", "c" },
};

您的代码将生成无效的XML:

<ResourceAttribute name="1" value="a"
                   name="2" value="b"
                   name="3" value="c" />

很难说没有一些示例XML。也许你想要有很多<ResourceAttribute ...>元素?

foreach (var pair in Run)
{
    XMLE.Add(
        new XElement("ResourceAttribute",
            new XAttribute("key", pair.Key),
            new XAttribute("value", pair.Value)
        )
    );
}

或者您的意思是将这些属性放在子元素上吗?

    // replace original loop body
    XMLRun.Add(new XElement("Run", XMLRunAttributeK, XMLRunAttributeV));

或者根据名称命名属性?

    // replace original loop body
    XMLRun.Add(new XAttribute(pair.Key, pair.Value));